What is the diff between pure() and return() ?Could you give me an example?

In the context that you are seeing these two statements inside a do block (i.e. when writing a Choice for example), they probably mean the same thing.

pure is a function that is defined in Applicative typeclass, whereas return is defined in the Action typeclass (aka Monad), which is a ‘subclass’ of the former, if you like. I believe that the implementation of return is just return = pure.

The only difference, as a developer, when looking at code outside the do notation, is that if you see return , you can assume that you can use monadic >>= in addition to <*> and liftA2 from Applicative. The converse is not true.

**edit: Please see @cocreature’s post below **