Remove duplicates but keep elements in order. O(n * log n)

cycle ties a finite list into a circular one, or equivalently,
the infinite repetition of the original list. It is the identity on
infinite lists.

>>> cycle [] *** Exception: Prelude.cycle: empty list >>> cycle [42] [42,42,42,42,42,42,42,42,42,42... >>> cycle [2, 5, 7] [2,5,7,2,5,7,2,5,7,2,5,7...

Extract the elements after the head of a list, which
must be non-empty.

>>> tail [1, 2, 3] [2,3] >>> tail [1] [] >>> tail [] *** Exception: Prelude.tail: empty listWARNING: This function is partial. You can use case-matching or uncons instead.

reverse `xs` returns the elements of `xs` in
reverse order. `xs` must be finite.

>>> reverse [] [] >>> reverse [42] [42] >>> reverse [2,5,7] [7,5,2] >>> reverse [1..] * Hangs forever *

**Packages**- is:exact