!import "base.tri" !Local !import "list.tri" !Local !import "lazy.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) cond_ self patterns = lazyList (_ : t) (pattern rest : matchPair (testK actionK : lazyBool actionK (_ : self rest) (testK t)) pattern) patterns cond patterns = y cond_ patterns guard testK actionK = pair testK actionK