type 'a t
val wrap : ('a -> 'b) -> 'a -> 'b tval wrap_mt : ('a -> 'b) -> 'a -> 'b tval bind : 'a t -> f:('a -> 'b t) -> 'b tval map : 'a t -> f:('a -> 'b) -> 'b tval return : 'a -> 'a tval (>>=) : 'a t -> ('a -> 'b t) -> 'b tval (>>|) : 'a t -> ('a -> 'b) -> 'b tval gc_finalise : ('a -> unit t) -> 'a -> unit