Extends Base.Comparator, providing a type-indexed value that
allows you to compare values of that type.
type ('a, 'witness) t = private ('a, 'witness) Base.Comparator.t = {compare : 'a ‑> 'a ‑> Core_kernel__.Import.int; |
sexp_of_t : 'a ‑> Base.Sexp.t; |
}include module type of Base.Comparator with type (a, witness) Comparator.t := (a, witness) tA type-indexed value that allows one 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 from those using a monomorphic compare.
module type S : sig ... endmodule type S1 : sig ... endmodule type S_fc : sig ... endval make : compare:('a ‑> 'a ‑> int) ‑> sexp_of_t:('a ‑> Base.Sexp.t) ‑> (module S_fc with type comparable_t = 'a)make creates a comparator witness for the given comparison. It is intended as a
lightweight alternative to the functors below, to be used like so:
include (val Comparator.make ~compare ~sexp_of_t)
module Poly = Base.Comparator.Polymodule S_to_S1 = Base.Comparator.S_to_S1module Make = Base.Comparator.MakeMake creates a comparator value and its phantom comparator_witness type for a
nullary type.
module Make1 = Base.Comparator.Make1Make1 creates a comparator value and its phantom comparator_witness type for a
unary type. It takes a compare and sexp_of_t that have
non-standard types because the Comparator.t type doesn't allow passing in
additional values for the type argument.
module type Derived : sig ... endmodule Derived = Base.Comparator.DerivedDerived creates a comparator function that constructs a comparator for the type
'a t given a comparator for the type 'a.
module type Derived2 : sig ... endmodule Derived2 = Base.Comparator.Derived2Derived2 creates a comparator function that constructs a comparator for the type
('a, 'b) t given comparators for the type 'a and 'b.
The following module types and functors may be used to define stable modules
module Stable : sig ... end