# Module type Monad_intf.Basic2

    module type Basic2 = sig .. end

Multi parameter monad. The second parameter get 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 ->
           ('a -> ('b, 'e) t) -> ('b, 'e) t

    val map : [ `Custom of
               ('a, 'e) t ->
               f:('a -> 'b) -> ('b, 'e) t
           | `Define_using_bind ]

    val return : 'a -> ('a, 'b) t