Difference between revisions of "Monad"

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

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.