Core_kernel.ComparableComparable extends Base.Comparable and provides functions for comparing like types.
Usage example:
module Foo = struct
module T = struct
type t = ... [@@deriving compare, sexp]
end
include T
include Comparable.Make (T)
endThen include Comparable.S in the signature (see Comparable_intf for an example).
To add an Infix submodule:
module C = Comparable.Make (T)
include C
module Infix = (C : Comparable.Infix with type t := t)Common pattern: Define a module O with a restricted signature. It aims to be (locally) opened to bring useful operators into scope without shadowing unexpected variable names. E.g. in the Date module:
module O = struct
include (C : Comparable.Infix with type t := t)
let to_string t = ..
endOpening Date would shadow now, but opening Date.O doesn't:
let now = .. in
let someday = .. in
Date.O.(now > someday)module type Infix = Base.Comparable.Infixmodule type Map_and_set_binable = sig ... endmodule type Polymorphic_compare = Base.Comparable.Polymorphic_comparemodule type S_plain = sig ... endmodule type S = sig ... endmodule type S_binable = sig ... endmodule type S_common = sig ... endmodule type Validate = Base.Comparable.Validatemodule type With_zero = Base.Comparable.With_zerolexicographic cmps x y compares x and y lexicographically using functions in the list cmps.
lift cmp ~f x y compares x and y by comparing f x and f y via cmp.
reverse cmp x y = cmp y x
Note: The Comparable.S interface exports both ascending and descending comparisons, so in most cases, it's better to use those.
Inherit comparability from a component.
These functors require only type t and val compare. They do not require val
sexp_of_t, and do not generate container datatypes.
module Polymorphic_compare (T : sig ... end) : Polymorphic_compare with type t := T.tThe Comparable Make functor family allows users to choose among the following attributes:
*_using_comparator or not*_binable or not*_plain or notThus there are functors like Make_plain or Make_binable_using_comparator, etc.
module Make_plain (T : sig ... end) : S_plain with type t := T.tmodule Make_plain_using_comparator (T : sig ... end) : S_plain with type t := T.t with type comparator_witness := T.comparator_witnessmodule Make_using_comparator (T : sig ... end) : S with type t := T.t with type comparator_witness := T.comparator_witnessmodule Make_binable (T : sig ... end) : S_binable with type t := T.tmodule Make_binable_using_comparator (T : sig ... end) : S_binable with type t := T.t with type comparator_witness := T.comparator_witnessmodule Extend (M : Base.Comparable.S) (X : sig ... end) : S with type t := M.t with type comparator_witness := M.comparator_witnessmodule Extend_binable (M : Base.Comparable.S) (X : sig ... end) : S_binable with type t := M.t with type comparator_witness := M.comparator_witnessmodule Map_and_set_binable (T : sig ... end) : Map_and_set_binable with type t := T.tmodule Map_and_set_binable_using_comparator (T : sig ... end) : Map_and_set_binable with type t := T.t with type comparator_witness := T.comparator_witnessmodule Validate_with_zero (T : sig ... end) : sig ... endThe following module types and functors may be used to define stable modules:
module Stable : sig ... end