compare -package:typelits-witnesses

Compare portions of two arrays. No bounds checking is performed.
Lexicographically compare a list of attributes of two records. Example:
compare [comparing fst, comparing snd]
Compare two strings for canonical equivalence. Further options include case-insensitive comparison and codepoint order (as opposed to code unit order). Canonical equivalence between two strings is defined as their normalized forms (NFD or NFC) being identical. This function compares strings incrementally instead of normalizing (and optionally case-folding) both strings entirely, improving performance significantly. Bulk normalization is only necessary if the strings do not fulfill the FCD conditions. Only in this case, and only if the strings are relatively long, is memory allocated temporarily. For FCD strings and short non-FCD strings there is no memory allocation.
Compares two Lua values. Returns True if the value at index idx1 satisfies op when compared with the value at index idx2, following the semantics of the corresponding Lua operator (that is, it may call metamethods). Otherwise returns False. Also returns False if any of the indices is not valid. The value of op must be of type RelationalOperator: EQ: compares for equality (==) LT: compares for less than (<) LE: compares for less or equal (<=) Wraps hslua_compare. See also lua_compare.
Constant-time comparison
Compare two values, using their natural ordering.
Compare function, returning either Just an Ordering or Nothing.
Compare two trees with respect to set inclusion, using the given equality function for intersecting keys. If any intersecting keys hold unequal values, the trees are Incomparable.
Compare two trees with respect to set inclusion, using the given equality function for intersecting keys. If any intersecting keys hold unequal values, the trees are Incomparable.
Compare two trees with respect to set inclusion, using the given equality function for intersecting keys. If any intersecting keys hold unequal values, the trees are Incomparable.
Compare two trees with respect to set inclusion over the given color.
Generic comparison for heterogeneous vectors. It works same way as Ord instance for tuples.
>>> data A = A Int Char deriving Generic

>>> instance HVector A

>>> compare (A 1 'c') (A 2 'c')
LT
Compare branches on the kind of its arguments to either compare by Symbol or Nat.
Type equality and comparison
Perform a compare operation on the operands left and right * op: operator * left: left operand * right: right operand
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
Subphase for Termination.
Type family for comparing two numbers. It's expected that for any two valid n and m 'Compare n m' is equal to IsLess when 'n<m', IsEqual when 'n=m' and IsGreater when 'n>m'.