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