functor (X : sig type t end) ->
  sig
    type 'a t = X.t -> 'a
    val return : 'a -> 'a CCFun.Monad.t
    val ( >|= ) : 'a CCFun.Monad.t -> ('a -> 'b) -> 'b CCFun.Monad.t
    val ( >>= ) :
      'a CCFun.Monad.t -> ('a -> 'b CCFun.Monad.t) -> 'b CCFun.Monad.t
  end