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.
The Haskell Report defines no laws for
Ord. However,
<= is customarily expected to implement a non-strict partial
order and have the following properties:
- 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
Note that 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.