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