Sun Jul 8 09:06:07 EDT 2018

liftA2 for Monad

One of those weird confusions.  Obviously, because Applicative =>
Monad, there is an implementation of liftA2 for every Monad instance.

So what is the order of evaluation?  liftA2 first executes the effect
of the partial application, to then use <*> to apply the monadic
curried function to the second argument.

liftA2 f a b = f <$> a <*> b