Difference between revisions of "Pattern guard"
Jump to navigation
Jump to search
BrettGiles (talk | contribs) (HaWiki conversion) |
(Category:Syntax) |
||
Line 1: | Line 1: | ||
⚫ | |||
− | |||
The idea is to change the syntax for guards by replacing the use of a single condition with a list of qualifiers. These qualifiers, which include both conditions and ''pattern guards'' of the form ''pat <- exp'', serve to bind/match patterns against expressions. The syntax is comparable that of a [[list comprehension]], where instead the types of ''pat'' and ''exp'' match. This makes it easy, for instance, to pattern match against (possibly failing) table lookups while deciding which definition of a function to use. |
The idea is to change the syntax for guards by replacing the use of a single condition with a list of qualifiers. These qualifiers, which include both conditions and ''pattern guards'' of the form ''pat <- exp'', serve to bind/match patterns against expressions. The syntax is comparable that of a [[list comprehension]], where instead the types of ''pat'' and ''exp'' match. This makes it easy, for instance, to pattern match against (possibly failing) table lookups while deciding which definition of a function to use. |
||
Line 16: | Line 14: | ||
*[http://research.microsoft.com/Users/simonpj/Haskell/guards.html Simon Peyton Jones' note] on pattern guards |
*[http://research.microsoft.com/Users/simonpj/Haskell/guards.html Simon Peyton Jones' note] on pattern guards |
||
*[http://research.microsoft.com/%7Esimonpj/Papers/pat.htm Pattern Guards and Transformational Patterns]. |
*[http://research.microsoft.com/%7Esimonpj/Papers/pat.htm Pattern Guards and Transformational Patterns]. |
||
+ | |||
+ | [[Category:Glossary]] |
||
⚫ | |||
+ | [[Category:Syntax]] |
Revision as of 11:42, 8 November 2006
The idea is to change the syntax for guards by replacing the use of a single condition with a list of qualifiers. These qualifiers, which include both conditions and pattern guards of the form pat <- exp, serve to bind/match patterns against expressions. The syntax is comparable that of a list comprehension, where instead the types of pat and exp match. This makes it easy, for instance, to pattern match against (possibly failing) table lookups while deciding which definition of a function to use.
Stealing a function from the note,
addLookup env var1 var2
| Just val1 <- lookup env var1
, Just val2 <- lookup env var2
= val1 + val2
{-...other equations...-}
will check to see if both lookups succeed, and bind the results to val1
and val2
before proceeding to use the equation.
See also
- Simon Peyton Jones' note on pattern guards
- Pattern Guards and Transformational Patterns.