d10
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:
Data.D10.Char - Defines a D10 type as a newtype for Char,
where the values are restricted to characters between '0' and
'9'.
Data.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.
Data.D10.Safe - Defines a D10 type as
D0 | D1 | D2 | ... | D9.
Other modules:
Data.D10.Predicate - 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 Data.D10.Char
and Data.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. For Data.D10.Safe, the quasi-quoter is
offered merely as a possible convenience, allowing you to write
[d10|456789|] in place of the somewhat longer expression
[D4,D5,D6,D7,D8,D9].