Data types representing the digits zero through nine.
Modules
Each of the following modules defines a different type named D10, all of which
are different representations of the same concept:
-
D10.Char - Defines a D10 type as a newtype for Char, where the values
are restricted to characters between '0' and '9'.
-
D10.Num - Defines a D10 type as a newtype for any type with an instance of
the Num class, where the values are restricted to numbers between fromInteger 0 and fromInteger 9.
-
D10.Safe - Defines a D10 type as D0 | D1 | D2 | ... | D9.
The Arithmetic modules provide infix operators (+), (-), (*) for modular
arithmetic:
D10.Char.Arithmetic
D10.Num.Arithmetic
D10.Safe.Arithmetic
The following modules export constructors that can be used incorrectly:
D10.Char.Unsafe
D10.Num.Unsafe
Functions to test whether values of various types represent digits in the range
0 to 9:
Quasi-quoters
Each module that defines a D10 type also defines quasi-quoters for it. With
the QuasiQuotes GHC extension enabled, a single digit like 7 can be written
as [d10|7|], and a list of digits like [4,5,6] can be written as
[d10|456|]. For D10.Char and D10.Num, the quasi-quoters are an important
feature, because the D10 types defined in these modules have unsafe
constructors, and the quasi-quoters provide compile-time assurance that we never
construct a D10 that represents a value outside the range 0 to 9.