type typ = [ | `NatT| `IntT
]val to_typ : [< `Int of 'a | `Nat of 'b ] -> [> `IntT | `NatT ]val to_int : [< `Int of 'a | `Nat of 'a ] -> 'atype unop = [ | `PlusOp| `MinusOp
]type binop = [ | `AddOp| `SubOp| `MulOp| `DivOp| `ModOp| `PowOp
]type cmpop = [ | `LtOp| `GtOp| `LeOp| `GeOp
]val compare : t -> t -> intval compare_typ : typ -> typ -> intval equiv : 'a -> 'a -> boolval sub : ([> `IntT | `NatT ] as 'a) -> 'a -> boolval string_of_typ : [< `IntT | `NatT ] -> stringval string_of_unop : [< `MinusOp | `PlusOp ] -> stringval string_of_binop :
[< `AddOp | `DivOp | `ModOp | `MulOp | `PowOp | `SubOp ] ->
stringval string_of_cmpop : [< `GeOp | `GtOp | `LeOp | `LtOp ] -> stringval cmp :
cmpop ->
[> `Int of 'a | `Nat of 'b ] ->
[> `Int of 'a | `Nat of 'b ] ->
bool