|Version 3 (modified by simonmar@…, 8 years ago) (diff)|
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.
- Case Expressions and Formal Semantics of Pattern Matching in the Haskell 98 Report
- Simon's original proposal, 1997.
- Pattern guards in the GHC User's Guide
- Pattern Guards and Transformational Patterns, Martin Erwig and Simon Peyton Jones, Haskell Workshop, 2000.
- 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