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 ]