Remove redundant Functor constraint from StateT Applicative/Alternative instances

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] https://hackage.haskell.org/package/transformers-0.5.2.0/docs/src/Control.Mo... [2] https://hackage.haskell.org/package/transformers-0.5.2.0/docs/src/Control.Mo...

On Mon, 21 Nov 2016, Baldur Blöndal 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
Only since the AMP, i.e. GHC-7.10.

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.
-Edward
On Mon, Nov 21, 2016 at 5:52 PM, Baldur Blöndal
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] https://hackage.haskell.org/package/transformers-0.5.2.0/ docs/src/Control.Monad.Trans.State.Lazy.html#line-201 [2] https://hackage.haskell.org/package/transformers-0.5.2.0/ docs/src/Control.Monad.Trans.State.Lazy.html#line-210
_______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries

1) is good, I assume 3) will happen once the dust settles on AMP
2016-11-22 8:56 GMT+00:00 Edward Kmett
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.
-Edward
On Mon, Nov 21, 2016 at 5:52 PM, Baldur Blöndal
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] https://hackage.haskell.org/package/transformers-0.5.2.0/doc s/src/Control.Monad.Trans.State.Lazy.html#line-201 [2] https://hackage.haskell.org/package/transformers-0.5.2.0/doc s/src/Control.Monad.Trans.State.Lazy.html#line-210
_______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries

On Tue, Nov 22, 2016 at 09:17:32AM +0000, Baldur Blöndal wrote:
1) is good, I assume 3) will happen once the dust settles on AMP
Yes, there's a lot of conditional CPP in there already, but this doesn't seem severe enough to justify more.
2016-11-22 8:56 GMT+00:00 Edward Kmett
: 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.
-Edward
On Mon, Nov 21, 2016 at 5:52 PM, Baldur Blöndal
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] https://hackage.haskell.org/package/transformers-0.5.2.0/docs/src/ Control.Monad.Trans.State.Lazy.html#line-201 [2] https://hackage.haskell.org/package/transformers-0.5.2.0/docs/src/ Control.Monad.Trans.State.Lazy.html#line-210
_______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
participants (4)
-
Baldur Blöndal
-
Edward Kmett
-
Henning Thielemann
-
Ross Paterson