Terminates the chain strictly: returns the matched result, or throws
NonExhaustiveError if no clause matched. Note this is a runtime
check; for compile-time exhaustiveness over an ADT use MyAdt.match.
Adds a guarded clause: the pattern must match and guard must return
true. A failed guard falls through to the next clause.
A pattern-match in progress. Clauses are tried in order and the first pattern (and guard, if any) that succeeds wins; later clauses are not evaluated. Terminate the chain with Matcher.otherwise (total) or Matcher.exhaustive (throws NonExhaustiveError on no match).