[Haskell-cafe] Re: Guards with do notation?

Benjamin Franksen benjamin.franksen at bessy.de
Tue Oct 24 06:48:30 EDT 2006


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



More information about the Haskell-Cafe mailing list