Personal tools

Monad

From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
m
m (Added a link to "A tour of the Haskell Monad functions")
Line 34: Line 34:
 
* [[Simple monad examples]]
 
* [[Simple monad examples]]
 
* [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]
  +
  +
== Monad Reference Guides ==
  +
  +
An explanation of the basic Monad functions, with examples, can be found in the reference guide [http://members.chello.nl/hjgtuyl/tourdemonad.html A tour of the Haskell Monad functions], by Henk-Jan van Tuyl.
  +
   
 
[[Category:Standard classes]]
 
[[Category:Standard classes]]

Revision as of 19:53, 17 July 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.