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

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

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)