Version 3 (modified by Simon Marlow, 11 years ago) (diff)

Pattern Guards

Ticket: #56

See ExtensionDescriptionHowto for information on how to write these extension descriptions. Please add any new extensions to the list of HaskellExtensions.

Brief Explanation

The syntax for guards is changed to

gd| qual1,, qualn

(Haskell 98 allows only a single, Boolean, guard.) In pattern guards of the form p <- e, the two sides must have the same type, and if the value if e does not match p, the guards fails.



  • avoids awkward case constructs in certain situations
  • a relatively small and orthogonal extension
  • the required changes to the Report are clearly laid out in the above paper.


  • the re-use of monadic binding notation from list comprehensions and do-notation for pure matching is confusing, but the more rational = would create parsing difficulties, e.g.
    f p | x = y = z