Sourcetype ('a, _) op = | True : 'a -> ('a, z) op| False : 'a -> ('a, z) op| Zero : 'a -> ('a, z) op| Succ : 'a -> ('a, z s) op| Minus : 'a -> ('a, z s) op| Eq : 'a -> ('a, z s s) op| Max : 'a -> ('a, z s s) op| IMax : 'a -> ('a, z s s) op| Le : 'a -> ('a, z s s) op| Ite : 'a -> ('a, z s s s) op
Sourcetype ('a, 'b) arrow = | Zero : 'b -> (z, 'b) arrow| One : ('b -> 'b) -> (z s, 'b) arrow| Two : ('b -> 'b -> 'b) -> (z s s, 'b) arrow| Three : ('b -> 'b -> 'b -> 'b) -> (z s s s, 'b) arrow
Sourcetype ('a, 'c) k = {mk : 'b. ('a, 'b) op -> ('b, 'c) arrow;
}