val apply : ('a, 'b) t -> 'a -> 'bval print : ('a, 'b) t -> unittype (!'a, !'b) matching = {patt : patt;has_when : bool;expr : ('a, 'b) expr;
}and patt = | Eapp of patt list| Eacc of patt list| Econ of string| Estr of string| Eint of string| Etup of patt list| Erec of (patt * patt) list| Evar of unit
and (!'a, !'b) expr = 'a -> 'b optionval extend : ('a, 'b) t -> (patt * bool * ('a, 'b) expr) list -> ('a, 'b) t