functor
  (M : sig
         type +'a m
         val return : 'a -> 'a Deriving_monad.MonadDefault.m
         val fail : string -> 'a Deriving_monad.MonadDefault.m
         val ( >>= ) :
           'a Deriving_monad.MonadDefault.m ->
           ('a -> 'b Deriving_monad.MonadDefault.m) ->
           'b Deriving_monad.MonadDefault.m
       end) ->
  sig
    type 'a m = 'a M.m
    val return : 'a -> 'a m
    val fail : string -> 'a m
    val ( >>= ) : 'a m -> ('a -> 'b m) -> 'b m
    val ( >> ) : 'a m -> 'b m -> 'b m
  end