It sounds like the semantics of the MonadPlus methods are
under-specified. I recall once writing a newtype wrapper to treat the
same non-determinism monad with different mplus semantics, akin to cut
versus backtracking.

I think of MonadPlus as a less expressive version of msplit, from

  Backtracking, Interleaving, and Terminating Monad Transformers
  The Functional Pearl paper by Oleg Kiselyov, Chung-chieh Shan,
Daniel P. Friedman and Amr Sabry. ICFP 2005.

Is that an over-simplification?

On Fri, May 9, 2008 at 3:12 PM, Bryan O'Sullivan <[EMAIL PROTECTED]> wrote:
> Andrew Coppin wrote:
>
>> ...so it's a kind of choice operator? Run all actions until you get to
>> one that succeeds and return the result from that?
>
> In the context of Parsec, yes.  In the grander scheme of things, the
> behaviour depends on whatever is appropriate for the particular monad
> you're working in.
>
> So, for example, mplus for lists is (++) and mzero is [], which is quite
> a different set of behaviours from the Parsec case.  Usually, you can
> rely on MonadPlus behaving like a monoid.  There are occasional
> exceptions, which is a mite upsetting.
>
> http://www.haskell.org/haskellwiki/MonadPlus
>
>        <b
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to