The transformers-supply package
The Supply monad represents a computation that consumes values from a provided supply.
This package comes with two separate implementations, Control.Applicative.Supply and Control.Monad.Trans.Supply. The former provides an applicative and applicative transformer, the latter a monad and monad transformer.
The reason for providing two separate implementations is that the Applicative instance of Control.Monad.Trans.Supply.SupplyT incurs a Monad constraint on the wrapped type, meaning it's not possible to (usefully) wrap a type that only has an Applicative instance.
The implementation of Control.Applicative.Supply.SupplyT has an Applicative instance for wrapped types that are only Applicative, but this implementation cannot be made an instance of Monad, meaning it is less powerful than the version from Control.Monad.Trans.Supply.
In general, use Control.Monad.Trans.Supply unless you're wrapping a type that has no Monad instance, in which case you can fall back to Control.Applicative.Supply.
|Dependencies||base (==4.*), mtl (>=2.1), transformers (>=0.3) [details]|
|Copyright||Copyright © 2013 Merijn Verstraaten|
|Maintainer||Merijn Verstraaten <firstname.lastname@example.org>|
|Source repository||head: hg clone https://bitbucket.org/merijnv/transformers-supply
head: hg clone git+ssh://github.com:merijn/transformers-supply.git
|Uploaded||Fri Jul 5 10:36:13 UTC 2013 by MerijnVerstraaten|
|Downloads||316 total (5 in the last 30 days)|
|Status||Docs uploaded by user
Build status unknown [no reports yet]
For package maintainers and hackage trustees