A class of datatypes that faithfully represent a sub-range of Integer
that includes 0. A valid instance must obey the following laws:
fromInteger must be a retract of toInteger:
fromInteger (toInteger a) == aRestricted to the range [0, Limit] (with Nothing understood as positive
infinity), fromInteger must be an inverse of toInteger:
limited i ==> toInteger (fromInteger i) == iwhere:
limited i = case limit of
Just l -> 0 <= i && i <= l
Nothing -> 0 <= iWARNING: violating the above constraint in particular breaks type safety.
The implementations of Ord, Enum, Num, Integral must be compatible
with that of Integer, whenever all arguments and results fall within
[0, Limit], for example:
limited i && limited j && limited k && (i * j == k) ==> (fromInteger i * fromInteger j == fromInteger k)Methods modAdd, modSub, and modMul implement modular addition,
multiplication, and subtraction. The default implementation is via Integer,
but a faster implementation can be provided instead. If provided, the
implementation must be correct for moduli in range [1, Limit].
WARNING: a naive implementaton is prone to arithmetic overflow and may produce invalid results for moduli close to Limit.
Instances12SaneIntegral, …
SaneIntegral IntegerDefined in finite-typelits-0.2.0.0 · Data.Finite.Internal.IntegralSaneIntegral NaturalDefined in finite-typelits-0.2.0.0 · Data.Finite.Internal.IntegralSaneIntegral Int16Defined in finite-typelits-0.2.0.0 · Data.Finite.Internal.IntegralSaneIntegral Int32Defined in finite-typelits-0.2.0.0 · Data.Finite.Internal.IntegralSaneIntegral Int64Defined in finite-typelits-0.2.0.0 · Data.Finite.Internal.IntegralSaneIntegral Int8Defined in finite-typelits-0.2.0.0 · Data.Finite.Internal.IntegralSaneIntegral Word16Defined in finite-typelits-0.2.0.0 · Data.Finite.Internal.IntegralSaneIntegral Word32Defined in finite-typelits-0.2.0.0 · Data.Finite.Internal.IntegralSaneIntegral Word64Defined in finite-typelits-0.2.0.0 · Data.Finite.Internal.IntegralSaneIntegral Word8Defined in finite-typelits-0.2.0.0 · Data.Finite.Internal.IntegralSaneIntegral IntDefined in finite-typelits-0.2.0.0 · Data.Finite.Internal.IntegralSaneIntegral WordDefined in finite-typelits-0.2.0.0 · Data.Finite.Internal.Integral