functor
  (T : sig
         type t
         type sexpable = t
         val sexp_of_t : sexpable -> Sexplib.Sexp.t
         val t_of_sexp : Sexplib.Sexp.t -> sexpable
         val compare : Comparable.t -> Comparable.t -> int
       end->
  sig
    type comparable = T.t
    val compare : T.t -> T.t -> int
    val ascending : T.t -> T.t -> int
    val descending : T.t -> T.t -> int
    module Infix :
      sig
        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
      end
    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