# Module Deriving_monad

    module Deriving_monad: sig .. end

    module type Monad = sig .. end

    module type MonadPlus = sig .. end

    module MonadDefault: functor (M : sig
    type +'a m

    val return : 'a -> 'a m
    val fail : string -> 'a m
    val (>>=) : 'a m ->
           ('a -> 'b m) -> 'b mend) -> Monad  with type +'a m = 'a M.m

    module Monad_option: MonadPlus  with type 'a m = 'a option

    module Monad_list: MonadPlus  with type 'a m = 'a list

    module IO: sig .. end

    module type MonadUtilsSig = sig .. end

    module MonadUtils: functor (M : Monad) -> MonadUtilsSig  with type 'a m = 'a M.m

    module type MonadPlusUtilsSig = sig .. end

    module MonadPlusUtils: functor (M : MonadPlus) -> MonadPlusUtilsSig  with type 'a m = 'a M.m

    module MonadPlusUtils_option: MonadPlusUtilsSig  with type 'a m = 'a Monad_option.m

    module MonadPlusUtils_list: MonadPlusUtilsSig  with type 'a m = 'a Monad_list.m

    module Monad_IO: MonadUtilsSig  with type 'a m = 'a IO.m

    module type Monad_state_type = sig .. end

    module Monad_state: functor (S : sig
    type state

    end) -> Monad_state_type  with type state = S.state