!import "list.tri" !Local match_ = y (self value patterns : triage t (_ : t) (pattern rest : triage t (_ : t) (test result : if (test value) (result value) (self value rest)) pattern) patterns) match = (value patterns : match_ value (map (sublist : pair (head sublist) (head (tail sublist))) patterns)) otherwise = const (t t) matchExample = (x : match x [[(equal? 1) (_ : "one")] [(equal? 2) (_ : "two")] [(equal? 3) (_ : "three")] [(equal? 4) (_ : "four")] [(equal? 5) (_ : "five")] [(equal? 6) (_ : "six")] [(equal? 7) (_ : "seven")] [(equal? 8) (_ : "eight")] [(equal? 9) (_ : "nine")] [(equal? 10) (_ : "ten")] [ otherwise (_ : "I ran out of fingers!")]])