diff --git a/src/stdune/comparable.ml b/src/stdune/comparable.ml index 18bce70b..7c5a7bb9 100644 --- a/src/stdune/comparable.ml +++ b/src/stdune/comparable.ml @@ -2,3 +2,41 @@ module type S = sig type t val compare : t -> t -> Ordering.t end + +module type OPS = sig + type t + val (=) : t -> t -> bool + val (>=) : t -> t -> bool + val (>) : t -> t -> bool + val (<=) : t -> t -> bool + val (<) : t -> t -> bool +end + +module Operators (X : S) = struct + type t = X.t + + let (=) a b = + match X.compare a b with + | Eq -> true + | Gt | Lt -> false + + let (>=) a b = + match X.compare a b with + | Gt | Eq -> true + | Lt -> false + + let (>) a b = + match X.compare a b with + | Gt -> true + | Lt | Eq -> false + + let (<=) a b = + match X.compare a b with + | Lt | Eq -> true + | Gt -> false + + let (<) a b = + match X.compare a b with + | Lt -> true + | Gt | Eq -> false +end diff --git a/src/stdune/comparable.mli b/src/stdune/comparable.mli index 18bce70b..ed01cb49 100644 --- a/src/stdune/comparable.mli +++ b/src/stdune/comparable.mli @@ -2,3 +2,14 @@ module type S = sig type t val compare : t -> t -> Ordering.t end + +module type OPS = sig + type t + val (=) : t -> t -> bool + val (>=) : t -> t -> bool + val (>) : t -> t -> bool + val (<=) : t -> t -> bool + val (<) : t -> t -> bool +end + +module Operators (X : S) : OPS with type t = X.t