
On Wed, Jan 14, 2009 at 01:54:47PM +0100, Bas van Dijk wrote:
On Sat, Dec 20, 2008 at 7:09 PM, Bas van Dijk
wrote: In a project of mine I needed an Applicative instance for Identity and noticed it didn't exist. So I decided to add Applicative (and Alternative instances where possible) for all MTL types.
When I was about to submit a library proposal I saw there already existed one. So I added my patch to that ticket.
My patch I different in that my Applicative instances don't require a Monad constraint. This also means that most Functor instances now also depend on Applicative rather than on Monad.
See the ticket for the details:
The Functor instances could depend on Functor rather than Applicative. Even though Applicative is not a superclass of Monad, I think we ought to ensure that the instances are compatible. That is, if an Applicative is also a Monad, then we should have pure = return and (<*>) = ap. This fails for your ErrorT instance: ap runs the second computation only if the first succeeded, while (<*>) runs them both before checking for errors. It needs a Monad constraint (like StateT), though not an Error constraint.
* Can we get rid of the Monad and MonadPlus constraints in the Applicative and Alternative instances for StateT and RWST?
I don't think so: you need part of the value generated by the first computation, namely the state (inside the f), to construct the second one. You can do that in a Monad, but not in an Applicative. At Henning Thielemann's request, I've recently put up on hackage a restructuring of the mtl into three packages, to provide three different interfaces to the same monad transformers: transformers: a Haskell 98 package with the MonadTrans class, concrete monad transformers, operations and liftings. monads-fd: multi-parameter monad classes using functional dependencies, with instances for these transformers. (Almost backward-compatible with the mtl package.) monads-tf: monad classes using type families, with instances for these transformers. The first one includes Applicative instances like these.