The
Ord class is used for totally ordered datatypes.
Instances of
Ord can be derived for any user-defined datatype
whose constituent types are in
Ord. The declared order of the
constructors in the data declaration determines the ordering in
derived
Ord instances. The
Ordering datatype allows a
single comparison to determine the precise ordering of two objects.
Ord, as defined by the Haskell report, implements a total order
and has the following properties:
- Comparability x <= y || y <= x =
True
- Transitivity if x <= y && y <=
z = True, then x <= z = True
- Reflexivity x <= x = True
- Antisymmetry if x <= y && y <=
x = True, then x == y = True
The following operator interactions are expected to hold:
- x >= y = y <= x
- x < y = x <= y && x /= y
- x > y = y < x
- x < y = compare x y == LT
- x > y = compare x y == GT
- x == y = compare x y == EQ
- min x y == if x <= y then x else y = True
- max x y == if x >= y then x else y = True
Note that (7.) and (8.) do
not require
min and
max to return either of their arguments. The result is merely
required to
equal one of the arguments in terms of
(==).
Minimal complete definition: either
compare or
<=.
Using
compare can be more efficient for complex types.