Multi parameter monad. The second parameter gets unified across all the computation.
This is used to encode monads working on a multi parameter data structure like
(('a,'b) result).
type ('a, 'e) t
val bind : ('a, 'e) t‑> f:('a‑> ('b, 'e) t) ‑> ('b, 'e) t
val map : [ `Define_using_bind | `Custom of ('a, 'e) t‑> f:('a‑>'b) ‑> ('b, 'e) t ]