Parameter Make.X

type 'a t
include Basic2 with type ('a, _) t := 'a t
val bind : 'a t -> ('a -> 'b t) -> 'b t
val return : 'a -> 'a t

The following identities ought to hold (for some value of =):

  • return x >>= f = f x
  • t >>= fun x -> return x = t
  • (t >>= f) >>= g = t >>= fun x -> (f x >>= g)

Note: >>= is the infix notation for bind)