module Comparator: sig .. end
A Comparator.t is a type-indexed value that allows you to compare (and for generating
    error messages, serialize) values of the type in question.  One of the type parameters
    is a phantom parameter used to distinguish comparators potentially built on different
    comparison functions.  In particular, we want to distinguish those using polymorphic
    compare and those using a monomorphic compare.
type ('a, 'unique_id) t = private {
}
type ('a, 'unique_id) t_ = ('a, 'unique_id) t 
module type Pre = sig .. end
module type Pre_binable = sig .. end
module type S = sig .. end
module type S_binable = sig .. end
module Make (M : Pre) : S          with type t = M.t
module Make_binable (M : Pre_binable) : S_binable  with type t = M.t
module type S1 = sig .. end
module Poly: S1  with type 'a t = 'a
module S_to_S1 (S : S) : S1 
  with type 'a t = S.t 
    with type comparator = S.comparator
module Make1 (M : sigtype 'a t 
val compare : 'a t -> 'a t -> int
val sexp_of_t : 'a t -> Sexplib.Sexp.t
end) : S1  with type 'a t := 'a M.t