
2 Oct
2006
2 Oct
'06
6:55 p.m.
On Mon, Oct 02, 2006 at 11:58:44PM +0200, Yitzchak Gale wrote:
Ross Paterson wrote:
...if we define exitMaybe :: Exit e () -> Maybe e exitMaybe (Continue _) = Nothing exitMaybe (Exit e) = Just e
Maybe monads quit on failure and continue on success. We want the opposite semantics for guards, pattern matching, and the like.
And that's what mplus does.
In particular, your identity
exitMaybe (x >> y) = exitMaybe x `mplus` exitMaybe y
is not true. If we let x = Continue () and y = Exit z, then
exitMaybe (x >> y) = Just z
but
exitMaybe x `mplus` exitMaybe y = Nothing
exitMaybe (Continue ()) `mplus` exitMaybe (Exit z) = Nothing `mplus` Just z = Just z