Discrete
Trait for types that form a discrete sequence.
Every value has an immediate successor and predecessor.
The successor and predecessor functions must satisfy the following laws:
prev(succ(x)) == xsucc(prev(x)) == xsucc(x) > x, except at the maximum value of a bounded type (see below).
For bounded types (e.g. Int8, Int16, Int32, Int64), succ wraps
around from the maximum value to the minimum value, and prev wraps around
from the minimum value to the maximum value. The unbounded BigInt never wraps.
Trait for types that form a discrete sequence, and its functions.