
On Fri, 12 Dec 2003 20:55:59 +0000
Graham Klyne
At 14:17 12/12/03 -0500, Derek Elkins wrote:
This will also provide a migration path if you want a more featureful monad. (or_maybe is mplus, fail or mzero can be used for Nothing when you explicitly want to fail).
Is this or_maybe (and friends) actually defined in any of the standard libraries? (Google found only one hit, in an old IRC log.)
Well, I was somewhat confusing in switching the order, but or_maybe is a specialization of mplus. mplus is the general standard function and or_maybe is David's specialized to Maybe version. http://www.haskell.org/onlinereport/monad.html The idea of the operations of the MonadPlus class is mzero typically stands for some kind of failure and mplus is a choice or a merging. A logic analogy is if a >> b >> c is do a and b and c then a `mplus` b `mplus` c is do a or b or c. mzero would be false and return x would be true. Examples of things that would be instances of MonadPlus are: lists as representing non-determinism where mzero is [] meaning no answers (failure) and mplus being non-deterministic choice represented as (++), parsers with mzero as the always failing parser and mplus as alternation (Parsec's <|>), concurrency with mzero as the process that immediately halts and mplus as par (run two processes in parallel).