sig
  type 'a t
  val bind : 'a Monad.Basic.t -> ('a -> 'b Monad.Basic.t) -> 'b Monad.Basic.t
  val return : 'a -> 'a Monad.Basic.t
end