Identity.ml1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16open Signatures open Derived type r external to_rea : 'a -> (r, 'e, 'a) s = "%identity" external of_rea : (r, 'e, 'a) s -> 'a = "%identity" class ['D] monad = object (d : 'D) inherit [r, 'D] monad'd method pure' = to_rea method bind' xI xyI = xyI (of_rea (xI d)) d end let monad = new monad