sig
  type t = Lt | Eq | Gt | Incomparable
  type comparison = Comparison.t
  val pp : t CCFormat.printer
  val to_string : t -> string
  val combine : Comparison.t -> Comparison.t -> Comparison.t
  val opp : Comparison.t -> Comparison.t
  val to_total : Comparison.t -> int
  val of_total : int -> Comparison.t
  val lexico : Comparison.t -> Comparison.t -> Comparison.t
  val ( ++ ) : Comparison.t -> Comparison.t -> Comparison.t
  type 'a comparator = '-> '-> Comparison.t
  val ( @>> ) :
    'Comparison.comparator ->
    'Comparison.comparator -> 'Comparison.comparator
  type ('a, 'b) combination
  val ( >>> ) :
    'Comparison.comparator ->
    ('b, 'c) Comparison.combination ->
    ('a, '-> '-> 'c) Comparison.combination
  val last :
    'Comparison.comparator -> ('a, Comparison.t) Comparison.combination
  val call : ('a, 'b) Comparison.combination -> '-> '-> 'b
  val dominates : ('-> '-> Comparison.t) -> 'a list -> 'b list -> bool
  module type PARTIAL_ORD =
    sig
      type t
      val partial_cmp :
        Comparison.PARTIAL_ORD.t ->
        Comparison.PARTIAL_ORD.t -> Comparison.comparison
    end
end