Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between 'return' and 'pure'

Tags:

haskell

What is the difference between return and pure from Control.Applicative ? It seems that I can use pure even at the end of a do block?

So is there any situation where one should be preferred over the other (besides that everyone expects a return at the end of a do Block)?

like image 400
greole Avatar asked Sep 25 '15 18:09

greole


1 Answers

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.

like image 184
Rein Henrichs Avatar answered Oct 04 '22 18:10

Rein Henrichs