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:
D10.Predicate
Quasi-quoters
The D10.Char and D10.Num modules include quasi-quoters
named d10 used to express single digits. For example, 7
can be written as [d10|7|]. This is 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.
D10.Char, D10.Num, and D10.Safe include quasi-quoters
named d10list to express lists of digits. For example,
[4, 5, 6] can be written as [d10list|456|].