Difference between revisions of "Monad"
Jump to navigation
Jump to search
Line 13: | Line 13: | ||
m >>= return = m |
m >>= return = m |
||
m >>= (\x -> k x >>= h) = (m >>= k) >>= h |
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. |
||
[[Category:Standard classes]] |
[[Category:Standard classes]] |
Revision as of 00:15, 5 January 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.