Remove redundant Functor constraint from StateT Applicative/Alternative instances

Edward Kmett ekmett at
Tue Nov 22 08:56:12 UTC 2016

They could be CPP'd around on newer versions, sure, at the cost of a fair
bit of noise in the source code. Presumably it was considered simpler to
just have one type signature. I've CC'd Ross Paterson, the maintainer of
transformers. Ultimately it comes down to a 3 way decision between 1.)
cleaner code by keeping the status quo, or 2.) cleaner haddocks by changing
the code as requested here conditionally with CPP, or 3.) loss of backwards
compatibility by just changing the type completely.

I don't particularly care which of the first two options are taken -- and
the first even has the benefit of requiring zero labor -- but I think it'd
be a bad idea to lose backwards compatibility by taking the third.


On Mon, Nov 21, 2016 at 5:52 PM, Baldur Blöndal <baldurpet at> wrote:

> Does this belong here? Applicative [1] and Alternative [2] instances of
> StateT have redundant constraints
> > instance (Functor m, Monad     m) => Applicative (StateT s m)
> > instance (Functor m, MonadPlus m) => Alternative (StateT s m)
> The Functor constraint may be removed
> [1]
> docs/src/Control.Monad.Trans.State.Lazy.html#line-201
> [2]
> docs/src/Control.Monad.Trans.State.Lazy.html#line-210
> _______________________________________________
> Libraries mailing list
> Libraries at
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the Libraries mailing list