Difference between revisions of "Monad"
Jump to navigation
Jump to search
Line 18: | Line 18: | ||
fmap ab ma = ma >>= (return . ab) |
fmap ab ma = ma >>= (return . ab) |
||
− | However, the Functor class is not a superclass of the Monad class. |
+ | However, the Functor class is not a superclass of the Monad class. See [[Functor hierarchy proposal]]. |
[[Category:Standard classes]] |
[[Category:Standard classes]] |
Revision as of 21:54, 21 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. See Functor hierarchy proposal.