Joachim Breitner wrote: > Hi, > > 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) HTH Ben _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe