sig
  type s
  type +'a m
  val return : '-> 'a m
  val fail : string -> 'a m
  val ( >>= ) : 'a m -> ('-> 'b m) -> 'b m
  val ( >> ) : 'a m -> 'b m -> 'b m
  val liftM : ('-> 'b) -> 'a m -> 'b m
  val liftM2 : ('-> '-> 'c) -> 'a m -> 'b m -> 'c m
  val liftM3 : ('-> '-> '-> 'd) -> 'a m -> 'b m -> 'c m -> 'd m
  val liftM4 :
    ('-> '-> '-> '-> 'e) -> 'a m -> 'b m -> 'c m -> 'd m -> 'e m
  val liftM5 :
    ('-> '-> '-> '-> '-> 'f) ->
    'a m -> 'b m -> 'c m -> 'd m -> 'e m -> 'f m
  val ap : ('-> 'b) m -> '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 ( =<< ) : ('-> 'b m) -> 'a m -> 'b m
  val join : 'a m m -> 'a m
  val filterM : ('-> bool m) -> 'a list -> 'a list m
  val mapAndUnzipM : ('-> ('b * 'c) m) -> 'a list -> ('b list * 'c list) m
  val zipWithM : ('-> '-> 'c m) -> 'a list -> 'b list -> 'c list m
  val zipWithM_ : ('-> '-> 'c m) -> 'a list -> 'b list -> unit m
  val foldM : ('-> '-> 'a m) -> '-> 'b list -> 'a m
  val foldM_ : ('-> '-> 'a m) -> '-> 'b list -> unit m
  val replicateM : int -> 'a m -> 'a list m
  val replicateM_ : int -> 'a m -> unit m
  val quand : bool -> unit m -> unit m
  val unless : bool -> unit m -> unit m
  type state = s
  val get : state m
  val put : state -> unit m
  val runState : 'a m -> state -> 'a * state
  module Utils :
    functor (T : Deriving_Typeable.Typeable->
      sig
        val sum :
          (int * Deriving_Pickle.id list -> T.a m) ->
          Deriving_Pickle.id -> T.a m
        val tuple :
          (Deriving_Pickle.id list -> T.a m) -> Deriving_Pickle.id -> T.a m
        val record :
          (T.a -> Deriving_Pickle.id list -> T.a m) ->
          int -> Deriving_Pickle.id -> T.a m
      end
end