Cases of a pattern matching can include guard expressions, which are arbitrary boolean expressions that must evaluate to true for the match case to be selected. Guards occur just before the -> token and are introduced by the when keyword:
match expr with
pattern1 [when cond1] -> expr1
| ...
| patternN [when condN] -> exprN
(Same syntax for the fun, function, and try ... with constructs.)
During matching, if the value of expr matches some pattern
patterni which has a guard condi, then the expression condi
is evaluated (in an environment enriched by the bindings performed
during matching). If condi evaluates to true, then expri is
evaluated and its value returned as the result of the matching, as
usual. But if condi evaluates to false, the matching is resumed
against the patterns following patterni.