# Ordering¶

A value of the built-in type Ordering is a value denoting that something is “less than”, “equal to”, or “greater than” something else:

type Ordering
| Less
| Equal
| Greater


## compareTime : Time -> Time -> Ordering¶

### Examples¶

val a = compareInt 3 6
//    = Less
val b = compareFloat 4.5 4.5
//    = Equal
val c = compareInstant #2017-12-24T12:00:00Z# #2017-10-11T10:00:00Z#
//    = Greater
val d = compareDate (Date::from 2017 September 25) (Date::from 2017 September 19)
//    = Greater
val e = compareTime (Time::from 12 0 0 0) (Time::from 13 0 0 0)
//    = Less


## Ordering::twoStep : (a -> a -> Ordering) -> (a -> a -> Ordering) -> a -> a -> Ordering¶

Ordering combinator ‘twoStep’ takes two functions comparing a given type. When comparing concrete arguments, if the first comparison function returns ‘Equal’, the second one is used to decide the comparison.

### Examples¶

val a = Ordering::twoStep
(\(x: Tuple Int Float) -> \y -> compareInt (fst x) (fst y))
(\(x: Tuple Int Float) -> \y -> compareFloat (snd x) (snd y))
(5, 99.9) (7, 15.599)
//    = Less

type R { a: Float, b: Int}
val b = Ordering::twoStep
(\(x: R) -> \(y: R) -> compareFloat (x.a) (y.a))
(\(x: R) -> \(y: R) -> compareInt (x.b) (y.b))
R {a = 3.14, b = 6} R {a = 3.14, b = 2}
//    = Greater


## Ordering::lexicographic : (a -> a -> Ordering) -> (a -> a -> Ordering) -> a -> a -> Ordering¶

Ordering combinator ‘lexicographic’ builds an ordering function for a binary tuple. It takes two arguments, comparison functions for the first and the second element of the tuple, and returns a lexicographic comparison on the tuples.

### Examples¶

val a = Ordering::lexicographic compareInt compareFloat
(5, 99.9) (7, 15.599)
//    = Less

type R { a: Float, b: Int}
val b = Ordering::lexicographic compareInt compareFloat
(5, 17.0) (5, 16.9)
//    = Greater