Are pattern guards obsolete?

Claus Reinke claus.reinke at
Wed Dec 13 13:18:15 EST 2006

> I am not clear why you think the current notation is confusing...
> Could you give a concrete example?  I am thinking of something along
> the lines:  based on how "<-" works in list comprehensions and the do
> notation, I would expect that pattern guards do XXX but instead, they
> confusingly do YYY.  I think that this will help us keep the
> discussion concrete.

consider the following examples:

    -- do-notation: explicit return; explicit guard; monadic result 
    d _ = do { Just b <- return (Just True); guard b; return 42 }

    -- list comprehension: explicit return; implicit guard; monadic (list) result
    lc _ = [ 42 | Just b <- return (Just True), b ]

    -- pattern guard: implicit return; implicit guard; non-monadic result
    pg _ | Just b <- Just True, b = 42

in spite of their similarity, all of these constructs handle some of the 
monadic aspects differently. the translations of pattern guards not only
embed statements in "guard", they also embed the right hand sides of
generators in "return". translations of list comprehensions only lift 
statements. translation of do-notation lifts neither statements nor

does this clarify things?


More information about the Haskell-prime mailing list