sig
  type 'a t = GapiConversation.Session.t -> 'a * GapiConversation.Session.t
  val return : '-> 'a t
  val bind : 'a t -> ('-> 'b t) -> 'b t
  val get : '-> 'a * 'a
  val put : '-> '-> unit * 'a
  type 'a m = 'a t
  module Infix :
    sig
      val ( >>= ) : 'a m -> ('-> 'b m) -> 'b m
      val ( >> ) : 'a m -> 'b m -> 'b m
    end
  val join : 'a m m -> 'a m
  val liftM : ('-> 'b) -> 'a m -> 'b m
  val liftM2 : ('-> '-> 'c m) -> 'a m -> 'b m -> 'c m
  val fmap : ('-> 'b) -> 'a m -> 'b m
  val sequence : 'a m list -> 'a list m
  val sequence_ : 'a m list -> unit m
  val mapM : ('-> 'b m) -> 'a list -> 'b list m
  val mapM_ : ('-> 'b m) -> 'a list -> unit m
  val foldM : ('-> '-> 'a m) -> '-> 'b list -> 'a m
end