Еще ml-ное в данном случае

Вроде бы напрашивающая конструкция: вместо

function
    | Crel (a, Clt, b) -> self#int_bin "<"  a b 
    | Crel (a, Cle, b) -> self#int_bin "<=" a b 
    | Crel (a, Cgt, b) -> self#int_bin ">"  a b 
    | Crel (a, Cge, b) -> self#int_bin ">=" a b 
    ...


Писать:

function
    | Crel (a, Clt => "<"  as op, b)
    | Crel (a, Cle => "<=" as op, b)
    | Crel (a, Cgt => ">"  as op, b)
    | Crel (a, Cge => ">=" as op, b) -> self#int_bin op a b 
...


Но не умеет...