Exhaustive Pattern Matching Of List Variants
ReasonML's switch expression allows for powerful pattern matching. When using switch to pattern match against a list, the compiler will be sure to warn you if you haven't accounted for all variants of a list.
let getFirst = (numList: list(int)): int => {
switch(numList) {
| [first, ...rest] => first
};
};this pattern-matching is not exhaustive. Here is an example of a value that is not matched: []
The compiler knows that a list can either be 1) empty ([]) or 2) contain at least one value and another list ([a, ...rest]). To ensure all variants are accounted for, we can include the [] case in our switch.
let getFirst = (numList: list(int)): int => {
switch(numList) {
| [] => -1
| [first, ...rest] => first
};
};Last updated
Was this helpful?