module type OpVarADT = sig val op: 'a -> 'b -> 'c val init : 'c end