Difference between revisions of "Monad"

From HaskellWiki
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

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.