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