Module Core_kernel.Comparable
Comparable 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 = Core_kernel__.Comparable_intf.Infixmodule type S_plain = Core_kernel__.Comparable_intf.S_plainmodule type S = Core_kernel__.Comparable_intf.Smodule type S_binable = Core_kernel__.Comparable_intf.S_binablemodule type S_common = Core_kernel__.Comparable_intf.S_commonmodule type Validate = Core_kernel__.Comparable_intf.Validatemodule type With_zero = Core_kernel__.Comparable_intf.With_zero- val lexicographic : ('a -> 'a -> int) list -> 'a -> 'a -> int
- lexicographic cmps x ycompares- xand- ylexicographically using functions in the list- cmps.
- val lift : ('a -> 'a -> 'int_or_bool) -> f:('b -> 'a) -> 'b -> 'b -> 'int_or_bool
- lift cmp ~f x ycompares- xand- yby comparing- f xand- f yvia- cmp.
- module Inherit : functor (C : sig ... end) -> functor (T : sig ... end) -> S with type t := T.t
- Inherit comparability from a component. 
Make Functors
The Comparable Make functor family allows users to choose among the following attributes:
- *_using_comparatoror not
- *_binableor not
- *_plainor not
Thus there are functors like Make_plain or Make_binable_using_comparator, etc.
module Make_plain : functor (T : sig ... end) -> S_plain with type t := T.tmodule Make_plain_using_comparator : functor (T : sig ... end) -> S_plain with type t := T.t with type comparator_witness := T.comparator_witnessmodule Make_using_comparator : functor (T : sig ... end) -> S with type t := T.t with type comparator_witness := T.comparator_witnessmodule Make_binable : functor (T : sig ... end) -> S_binable with type t := T.tmodule Make_binable_using_comparator : functor (T : sig ... end) -> S_binable with type t := T.t with type comparator_witness := T.comparator_witnessmodule Extend : functor (M : Base.Comparable.S) -> functor (X : sig ... end) -> S with type t := M.t with type comparator_witness := M.comparator_witnessmodule Extend_binable : functor (M : Base.Comparable.S) -> functor (X : sig ... end) -> S_binable with type t := M.t with type comparator_witness := M.comparator_witnessmodule Map_and_set_binable : functor (T : sig ... end) -> Map_and_set_binable with type t := T.tmodule Map_and_set_binable_using_comparator : functor (T : sig ... end) -> Map_and_set_binable with type t := T.t with type comparator_witness := T.comparator_witnessmodule Validate_with_zero : functor (T : sig ... end) -> sig ... endmodule Stable : sig ... end