Personal tools

MonadPlus

From HaskellWiki

Revision as of 23:19, 15 January 2006 by Ashley Y (Talk | contribs)

Jump to: navigation, search
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

1 Which rules?

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

2 What should be done?

It is proposed that the class be separated into MonadZero, MonadPlus, MonadOr. See MonadPlus reform proposal.