# Module type Deriving_monad.MonadUtilsSig

    module type MonadUtilsSig = sig .. end

    include Deriving_monad.Monad

    val liftM : ('a -> 'b) -> 'a m -> 'b m

    val liftM2 : ('a -> 'b -> 'c) -> 'a m -> 'b m -> 'c m

    val liftM3 : ('a -> 'b -> 'c -> 'd) -> 'a m -> 'b m -> 'c m -> 'd m

    val liftM4 : ('a -> 'b -> 'c -> 'd -> 'e) -> 'a m -> 'b m -> 'c m -> 'd m -> 'e m

    val liftM5 : ('a -> 'b -> 'c -> 'd -> 'e -> 'f) ->
           'a m -> 'b m -> 'c m -> 'd m -> 'e m -> 'f m

    val ap : ('a -> 'b) m -> 'a m -> 'b m

    val sequence : 'a m list -> 'a list m

    val sequence_ : 'a m list -> unit m

    val mapM : ('a -> 'b m) -> 'a list -> 'b list m

    val mapM_ : ('a -> 'b m) -> 'a list -> unit m

    val (=<<) : ('a -> 'b m) -> 'a m -> 'b m

    val join : 'a m m -> 'a m

    val filterM : ('a -> bool m) -> 'a list -> 'a list m

    val mapAndUnzipM : ('a -> ('b * 'c) m) -> 'a list -> ('b list * 'c list) m

    val zipWithM : ('a -> 'b -> 'c m) -> 'a list -> 'b list -> 'c list m

    val zipWithM_ : ('a -> 'b -> 'c m) -> 'a list -> 'b list -> unit m

    val foldM : ('a -> 'b -> 'a m) -> 'a -> 'b list -> 'a m

    val foldM_ : ('a -> 'b -> 'a m) -> 'a -> '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