# Talk:Monad

From HaskellWiki

Revision as of 04:30, 11 March 2008 by BMeph (talk | contribs) (A small bit of Functor/Monad correspondence)

About some of that "Functor/Applicative/Monad" business, a little equivalence formula that's worked well for me goes like so:

` ``ap (return f) x == (return . f) =<< x == liftM f x == fmap f x`

Just to refresh, (=<<) is the reversed bind. Also, 'ap' is the Monad version of the applicative operator, (<*>) - see the Control.Applicative module for more help.

Usually, I stay away from using liftM, since it's identical to fmap, only confined t Monads, as 'ap' is to (<*>). However, the other liftMn functions are a nice generalization of the zipWithn family to Monads. The benefits of that, I'll leave for another discussion.

BMeph 04:30, 11 March 2008 (UTC)