
On Wed, Jul 28, 2010 at 03:03:01AM -0700, Johann Bach wrote:
I'm looking at Douglas Auclair's MonadPlus article, here http://www.haskell.org/sitewiki/images/6/6a/TMR-Issue11.pdf
So consider an example like
t2 = do x <- [1,2,3] y <- [1,2] guard $ x+y > 2 return (x,y)
This uses the list instance of MonadPlus.
Now, Douglas is talking about his own code, not the above example, but his own code is similar. And he says "the entire computation is chained by mplus". I'm confused because I thought it was chained by
=. In fact, I can't see where the above code makes use of mplus. The definition of "guard" uses mzero.
You are correct. That sentence is an error. Indeed, it ought to say "since the entire computation is chained with (>>=), a failure of one test voids the entire branch". This is because of the required law mzero >>= f = mzero Chaining a bunch of computations with `mplus` would cause each to be tried in turn until one succeeds, quite different than what Doug is talking about in that sentence. -Brent