Difference between revisions of "Pattern guard"
Jump to navigation
Jump to search
(link to GHC manual) |
|||
(One intermediate revision by one other user not shown) | |||
Line 1: | Line 1: | ||
− | + | Haskell 2010 changes the syntax for [[guard]]s 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. |
|
+ | From the GHC user's guide, |
||
− | Stealing a function from the note, |
||
<haskell> |
<haskell> |
||
+ | lookup :: FiniteMap -> Int -> Maybe Int |
||
+ | |||
addLookup env var1 var2 |
addLookup env var1 var2 |
||
| Just val1 <- lookup env var1 |
| Just val1 <- lookup env var1 |
||
Line 12: | Line 14: | ||
==See also== |
==See also== |
||
− | *[http://research.microsoft.com/ |
+ | *[http://research.microsoft.com/en-us/um/people/simonpj/Haskell/guards.html Simon Peyton Jones' note] on pattern guards |
− | *[http://research.microsoft.com/ |
+ | *[http://research.microsoft.com/en-us/um/people/simonpj/Papers/pat.htm Pattern Guards and Transformational Patterns]. |
− | *[http://www.haskell.org/ghc/docs/latest/html/users_guide/syntax-extns.html# |
+ | *[http://www.haskell.org/ghc/docs/latest/html/users_guide/syntax-extns.html#pattern-guards GHC Manual on pattern guards] |
+ | * [http://hackage.haskell.org/trac/haskell-prime/wiki/PatternGuards#BriefExplanation The Haskell Prime wiki page of Pattern Guards] |
||
[[Category:Glossary]] |
[[Category:Glossary]] |
Revision as of 20:48, 9 May 2013
Haskell 2010 changes 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.
From the GHC user's guide,
lookup :: FiniteMap -> Int -> Maybe Int
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.