MonadPlus

From HaskellWiki
Revision as of 23:16, 15 January 2006 by Ashley Y (talk | contribs)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
MonadPlus class (base)
import Control.Monad

The MonadPlus class is defined like this:

class (Monad m) => MonadPlus m where
  mzero :: m a
  mplus :: m a -> m a -> m a

The precise set of rules that MonadPlus should obey is not agreed upon.

  • Monoidmplus and mzero form a monoid:
mplus mzero a = a
mplus a mzero = a
mplus (mplus a b) c = mplus a (mplus b c)
  • Left Zeromzero is a left zero for >>=:
mzero >>= k = mzero
  • Left Distribution:
mplus a b >>= k = mplus (a >>= k) (b >>= k)
  • Left Catch — this is rarely advocated, but Maybe and IO satisfy this as an alternative to Left Distribution.
mplus (return a) b = return a

Which rules?

Martin & Gibbons choose Monoid, Left Zero, and Left Distribution. This makes [] a MonadPlus, but not Maybe or IO.