# 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]`

.