sig
  type ('a, 'unique_id) t =
    ('a, 'unique_id) Comparator.t = private {
    compare : '-> '-> int;
    sexp_of_t : '-> Sexplib.Sexp.t;
  }
  type ('a, 'unique_id) t_ = ('a, 'unique_id) t
  module type Pre =
    sig
      type t
      val compare : t -> t -> int
      val t_of_sexp : Sexplib.Sexp.t -> t
      val sexp_of_t : t -> Sexplib.Sexp.t
    end
  module type Pre_binable =
    sig
      type t
      val compare : t -> t -> int
      val t_of_sexp : Sexplib.Sexp.t -> t
      val sexp_of_t : t -> Sexplib.Sexp.t
      val bin_t : t Bin_prot.Type_class.t
      val bin_read_t : t Bin_prot.Read_ml.reader
      val bin_read_t_ : t Bin_prot.Unsafe_read_c.reader
      val bin_read_t__ : (int -> t) Bin_prot.Unsafe_read_c.reader
      val bin_reader_t : t Bin_prot.Type_class.reader
      val bin_size_t : t Bin_prot.Size.sizer
      val bin_write_t : t Bin_prot.Write_ml.writer
      val bin_write_t_ : t Bin_prot.Unsafe_write_c.writer
      val bin_writer_t : t Bin_prot.Type_class.writer
    end
  module type S =
    sig
      type t
      val compare : t -> t -> int
      val t_of_sexp : Sexplib.Sexp.t -> t
      val sexp_of_t : t -> Sexplib.Sexp.t
      type comparator
      val comparator : (t, comparator) t_
    end
  module type S_binable =
    sig
      type t
      val compare : t -> t -> int
      val t_of_sexp : Sexplib.Sexp.t -> t
      val sexp_of_t : t -> Sexplib.Sexp.t
      val bin_t : t Bin_prot.Type_class.t
      val bin_read_t : t Bin_prot.Read_ml.reader
      val bin_read_t_ : t Bin_prot.Unsafe_read_c.reader
      val bin_read_t__ : (int -> t) Bin_prot.Unsafe_read_c.reader
      val bin_reader_t : t Bin_prot.Type_class.reader
      val bin_size_t : t Bin_prot.Size.sizer
      val bin_write_t : t Bin_prot.Write_ml.writer
      val bin_write_t_ : t Bin_prot.Unsafe_write_c.writer
      val bin_writer_t : t Bin_prot.Type_class.writer
      type comparator
      val comparator : (t, comparator) t_
    end
  module Make :
    functor (M : Pre->
      sig
        type t = M.t
        val compare : t -> t -> int
        val t_of_sexp : Sexplib.Sexp.t -> t
        val sexp_of_t : t -> Sexplib.Sexp.t
        type comparator = Comparator.Make(M).comparator
        val comparator : (t, comparator) t_
      end
  module Make_binable :
    functor (M : Pre_binable->
      sig
        type t = M.t
        val compare : t -> t -> int
        val t_of_sexp : Sexplib.Sexp.t -> t
        val sexp_of_t : t -> Sexplib.Sexp.t
        val bin_t : t Bin_prot.Type_class.t
        val bin_read_t : t Bin_prot.Read_ml.reader
        val bin_read_t_ : t Bin_prot.Unsafe_read_c.reader
        val bin_read_t__ : (int -> t) Bin_prot.Unsafe_read_c.reader
        val bin_reader_t : t Bin_prot.Type_class.reader
        val bin_size_t : t Bin_prot.Size.sizer
        val bin_write_t : t Bin_prot.Write_ml.writer
        val bin_write_t_ : t Bin_prot.Unsafe_write_c.writer
        val bin_writer_t : t Bin_prot.Type_class.writer
        type comparator = Comparator.Make_binable(M).comparator
        val comparator : (t, comparator) t_
      end
  module type S1 =
    sig type 'a t type comparator val comparator : ('a t, comparator) t_ end
  module Poly :
    sig
      type 'a t = 'a
      type comparator = Comparator.Poly.comparator
      val comparator : ('a t, comparator) t_
    end
  module S_to_S1 :
    functor (S : S->
      sig
        type 'a t = S.t
        type comparator = S.comparator
        val comparator : ('a t, comparator) t_
      end
  module Make1 :
    functor
      (M : sig
             type 'a t
             val compare : 'a t -> 'a t -> int
             val sexp_of_t : 'a t -> Sexplib.Sexp.t
           end->
      sig
        type comparator = Comparator.Make1(M).comparator
        val comparator : ('M.t, comparator) t_
      end
  val ounit_tests : unit -> OUnit.test
end