functor
  (T : sig
         type t
         val compare : Comparable.t -> Comparable.t -> int
         val t_of_sexp : Sexplib.Sexp.t -> Comparable.t
         val sexp_of_t : Comparable.t -> Sexplib.Sexp.t
       end->
  sig
    type t = T.t
    module Replace_polymorphic_compare :
      sig
        val compare : T.t -> T.t -> int
        val ( > ) : T.t -> T.t -> bool
        val ( < ) : T.t -> T.t -> bool
        val ( >= ) : T.t -> T.t -> bool
        val ( <= ) : T.t -> T.t -> bool
        val ( = ) : T.t -> T.t -> bool
        val ( <> ) : T.t -> T.t -> bool
        val equal : T.t -> T.t -> bool
        val min : T.t -> T.t -> T.t
        val max : T.t -> T.t -> T.t
      end
    val compare : T.t -> T.t -> int
    val ( > ) : T.t -> T.t -> bool
    val ( < ) : T.t -> T.t -> bool
    val ( >= ) : T.t -> T.t -> bool
    val ( <= ) : T.t -> T.t -> bool
    val ( = ) : T.t -> T.t -> bool
    val ( <> ) : T.t -> T.t -> bool
    val equal : T.t -> T.t -> bool
    val min : T.t -> T.t -> T.t
    val max : T.t -> T.t -> T.t
    val ascending : T.t -> T.t -> int
    val descending : T.t -> T.t -> int
    val between : T.t -> low:T.t -> high:T.t -> bool
  end