Pattern Matching on Literals
Learn about pattern matching on literal values.
We'll cover the following
Pattern matching on literals
Instead of using pattern variables, we can also write function equations using literal values as patterns. Here is an example:
isZero :: Int -> Bool
isZero 0 = True
isZero n = False
This function has two defining equations. The first one uses the numeric literal 0
as the pattern. We can read it as "if the argument to isZero
is 0
, the result is True
". The second equation uses a pattern variable n
, and says that the result to isZero
should be False
, for any value of n
.
If a function has several defining equations, they will be applied from top to bottom for evaluating expressions involving the function’s application. However, an equation is only used if the argument to the function matches the pattern in the function equation. If several equations match, the first equation that matches is chosen.
The rules for matching are simple:
- Literal patterns match only the exact value they represent. That means
0
in the first equation ofisZero
matches only theInt
value0
. - Pattern variables match any value of the type they stand in for. So the variable
n
is the second equation ifisZero
matches anyInt
value.
For example, to evaluate the expression isZero 0
, Haskell checks whether the first equation isZero 0 = True
can be applied. This is the case because the argument 0
matches the literal pattern of the equation. So the result of isZero 0
is True
. The second equation is ignored (although the pattern would match).
On the other hand, when evaluating isZero 5
, the first equation can not be applied, as the argument 5
does not match the pattern 0
. Thus, the second equation is tried, i.e. isZero n = False
. As 5
matches the pattern variable n
, this equation is used and the result is False
.
If we load and run this function in ghci
, we in fact see that it works as intended.
*IsZero> isZero 0
True
*IsZero> isZero 5
False
Here is a terminal running ghci
where you can try out the isZero
function:
Get hands-on with 1200+ tech skills courses.