Module Base.Comparator
A 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.
type ('a, 'witness) t
= private
{
compare : 'a -> 'a -> int;
sexp_of_t : 'a -> Sexp.t;
}
type ('a, 'b) comparator
= ('a, 'b) t
module type S = sig ... end
module type S1 = sig ... end
module type S_fc = sig ... end
val make : compare:('a -> 'a -> int) -> sexp_of_t:('a -> 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 S_to_S1 : functor (S : S) -> S1 with type 'a t = S.t with type comparator_witness = S.comparator_witness
module Make : functor (M : sig ... end) -> S with type t := M.t
Make
creates acomparator
value and its phantomcomparator_witness
type for a nullary type.
module Make1 : functor (M : sig ... end) -> S1 with type 'a t := 'a M.t
Make1
creates acomparator
value and its phantomcomparator_witness
type for a unary type. It takes acompare
andsexp_of_t
that have non-standard types because theComparator.t
type doesn't allow passing in additional values for the type argument.
module type Derived = sig ... end
module Derived : functor (M : sig ... end) -> Derived with type 'a t := 'a M.t
Derived
creates acomparator
function that constructs a comparator for the type'a t
given a comparator for the type'a
.
module type Derived2 = sig ... end