sig
  type ('a, 'b) t
  val return : '-> ('a, 'b) Pvem.ERROR_MONAD.t
  val bind :
    ('a, 'b) Pvem.ERROR_MONAD.t ->
    ('-> ('c, 'b) Pvem.ERROR_MONAD.t) -> ('c, 'b) Pvem.ERROR_MONAD.t
  val ( >>= ) :
    ('a, 'b) Pvem.ERROR_MONAD.t ->
    ('-> ('c, 'b) Pvem.ERROR_MONAD.t) -> ('c, 'b) Pvem.ERROR_MONAD.t
  val fail : '-> ('a, 'b) Pvem.ERROR_MONAD.t
  val map :
    ('a, 'b) Pvem.ERROR_MONAD.t -> ('-> 'c) -> ('c, 'b) Pvem.ERROR_MONAD.t
  val ( >>| ) :
    ('a, 'b) Pvem.ERROR_MONAD.t -> ('-> 'c) -> ('c, 'b) Pvem.ERROR_MONAD.t
  val destruct :
    ('a, 'b) Pvem.ERROR_MONAD.t ->
    ([> `Error of '| `Ok of 'a ] -> ('c, 'd) Pvem.ERROR_MONAD.t) ->
    ('c, 'd) Pvem.ERROR_MONAD.t
  val ( >>< ) :
    ('a, 'b) Pvem.ERROR_MONAD.t ->
    ([> `Error of '| `Ok of 'a ] -> ('c, 'd) Pvem.ERROR_MONAD.t) ->
    ('c, 'd) Pvem.ERROR_MONAD.t
end