In GHC 7.8 and before, Applicative
was not a superclass of Monad
. It was even possible for a Monad
instance to not have an Applicative
instance. There was, however, an expectation that pure
and return
should have the same behavior for types that are instances of both.
In GHC 7.10, due to the Functor-Applicative-Monad Proposal, Applicative
is now a superclass of Monad
(class Applicative m => Monad m
) and it is now a rule that pure
and return
must be the same for all Monad
instances. In fact, the default implementation of return
is now pure
, as seen in the source on hackage.
pure
might be preferred to return
because it does not incur a Monad
constraint, only an Applicative
constraint, thus making the function more general. return
might be preferred to pure
in do notation because of historical precedent, but pure
could be used to exactly the same effect.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…