type 'a t
val wrap : ('a ‑> 'b) ‑> 'a ‑> 'b t
val bind : 'a t ‑> f:('a ‑> 'b t) ‑> 'b t
val map : 'a t ‑> f:('a ‑> 'b) ‑> 'b t
val return : 'a ‑> 'a t
val (>>=) : 'a t ‑> ('a ‑> 'b t) ‑> 'b t
val (>>|) : 'a t ‑> ('a ‑> 'b) ‑> 'b t