MonadPlus
From HaskellWiki
(Difference between revisions)
m (clean up) |
m (Remove Category:Standard classes - now in template) |
||
Line 45: | Line 45: | ||
It is proposed that the class be separated into <hask>MonadZero</hask>, <hask>MonadPlus</hask>, <hask>MonadOr</hask>. See [[MonadPlus reform proposal]]. | It is proposed that the class be separated into <hask>MonadZero</hask>, <hask>MonadPlus</hask>, <hask>MonadOr</hask>. See [[MonadPlus reform proposal]]. | ||
− | |||
− |
Latest revision as of 02:40, 31 July 2008
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.
- Monoid — andmplusform a monoid:mzero
mplus mzero a = a mplus a mzero = a mplus (mplus a b) c = mplus a (mplus b c)
- Left Zero — is a left zero for >>=:mzero
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
[edit] 1 Which satisfies what?
[]
Maybe
IO
STM
[edit] 2 Which rules?
Martin & Gibbons choose Monoid, Left Zero, and Left Distribution. This makes[]
Maybe
IO
[edit] 3 What should be done?
It is proposed that the class be separated intoMonadZero
MonadPlus
MonadOr