Joachim Breitner wrote: > Am Dienstag, den 24.10.2006, 12:48 +0200 schrieb Benjamin Franksen: >> > Am Dienstag, den 24.10.2006, 00:44 +0300 schrieb Misha Aizatulin: >> >> hello all, >> >> >> >> why is it not possible to use guards in do-expressions like >> >> >> >> do >> >> (a, b) | a == b <- getPair >> >> return "a and b are equal" >> > >> > Probably because it is not well-defined for all Monad what a failure >> > is, i.e. what to do in the other case. or something. Just my guess. >> >> No, fail is indeed a method of class Monad, and it is there exactly for >> this reason, i.e. because pattern matching may fail (even without guards, >> think of >> >> do >> Just a <- ... >> >> ) The restriction is there because guards are not allowed in lambda >> expressions, for which do-notation is merely syntactic sugar. (Some >> people have argued for lifting this restriction in Haskell', see >> http://thread.gmane.org/gmane.comp.lang.haskell.prime/1750/focus=1750) > > Then why is the ?guard? function, which can be used in a way to > implement what Misha wants, only available in MonadPlus, and not in > Monad?
This seems to be inconsistent. Anyway, the decision to include fail in class Monad (instead of using MonadZero) has been criticized by far more competent people than me, see this thread http://thread.gmane.org/gmane.comp.lang.haskell.cafe/15656/focus=15666 Ben _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe