Monad
From HaskellWiki
(Difference between revisions)
JohnHamilton (Talk | contribs) 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
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.