Sadly liftM vs. liftA actually retains a useful distinction, one is a definition of fmap in terms of (>>=) and the other in terms of (<*>). `ap` gives a default definition of (<*>) in terms of (>>=), but if someone instead writes (<*>) = liftM2 id today, then erasing the distinction would turn that into a circular definition, transforming obviously-correct existant code silently into a _|_. -Edward On Thu, Sep 24, 2015 at 8:36 PM, Dan Burton <danburton.email@gmail.com> wrote:
What about the derived functions in Control.Monad, such as liftM? Shall we similarly relax their constraints to Applicative and consider them "legacy"? (Did this already happen when I wasn't looking?)
On Thursday, September 24, 2015, John Wiegley <johnw@newartisans.com> wrote:
> Herbert Valerio Riedel <hvr@gnu.org> writes:
TLDR: To complete the AMP, turn `Monad(return)` method into a top-level binding aliasing `Applicative(pure)`.
Very much +1.
John _______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
-- -- Dan Burton
_______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries