Personal tools

Monad

From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
m (Add a link to sigfpe's monad tutorial.)
m (added link to Meet Bob The Monadic Lover)
Line 35: Line 35:
 
* [http://www.loria.fr/~kow/monads/index.html Of monads and space suits]
 
* [http://www.loria.fr/~kow/monads/index.html Of monads and space suits]
 
* [http://sigfpe.blogspot.com/2006/08/you-could-have-invented-monads-and.html You could have invented monads]
 
* [http://sigfpe.blogspot.com/2006/08/you-could-have-invented-monads-and.html You could have invented monads]
  +
* [[Meet Bob The Monadic Lover]]
   
 
== Monad Reference Guides ==
 
== Monad Reference Guides ==

Revision as of 10:48, 4 September 2006

Monad class (base)
import Control.Monad

The Monad class is defined like this:

class Monad m where
  (>>=) :: m a -> (a -> m b) -> m b
  (>>) :: m a -> m b -> m b
  return :: a -> m a
  fail :: String -> m a

All instances of Monad should obey:

return a >>= k  =  k a
m >>= return  =  m
m >>= (\x -> k x >>= h)  =  (m >>= k) >>= h

Any Monad can be made a Functor by defining

fmap ab ma = ma >>= (return . ab)

However, the Functor class is not a superclass of the Monad class. See Functor hierarchy proposal.

1 Monad Tutorials

Monads are known for being deeply confusing to lots of people, so there are plenty of tutorials specifically related to monads. Each takes a different approach to Monads, and hopefully everyone will find something useful.

2 Monad Reference Guides

An explanation of the basic Monad functions, with examples, can be found in the reference guide A tour of the Haskell Monad functions, by Henk-Jan van Tuyl.