sig
  module ExceptionT :
    functor (M : Monad.MONAD->
      sig
        type 'a t
        val ( >>= ) : 'a t -> ('-> 'b t) -> 'b t
        val ( >> ) : 'a t -> 'b t -> 'b t
        val return : '-> 'a t
        val run : 'a t -> 'a
        val raise : string -> 'a t
        val trywith : 'a t -> (string -> 'a t) -> 'a t
        val lift : 'M.t -> 'a t
      end
  module StateT :
    functor (S : Monad.TYPEWRAPPER->
      functor (M : Monad.MONAD->
        sig
          type 'a t
          val ( >>= ) : 'a t -> ('-> 'b t) -> 'b t
          val ( >> ) : 'a t -> 'b t -> 'b t
          val return : '-> 'a t
          val run : 'a t -> 'a
          val read_state : S.t t
          val write_state : S.t -> unit t
          val run_with : 'a t -> S.t -> 'a
          val lift : 'M.t -> 'a t
        end
end