compare package:first-class-families

Type-level compare for totally ordered data types.

Example

>>> :kind! Eval (Compare "a" "b")
Eval (Compare "a" "b") :: Ordering
= LT
>>> :kind! Eval (Compare '[1, 2, 3] '[1, 2, 3])
Eval (Compare '[1, 2, 3] '[1, 2, 3]) :: Ordering
= EQ
>>> :kind! Eval (Compare '[1, 3] '[1, 2])
Eval (Compare '[1, 3] '[1, 2]) :: Ordering
= GT