Digits 0-9 https://github.com/typeclasses/d10

This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow stackage.org to host generated Haddocks.

MIT licensed by Chris Martin
Maintained by Chris Martin, Julie Moronuki


Data types representing the digits zero through nine.


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.


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].



  • Initial release


  • Improve error messages when quasi-quoters are used in a non-expression context


  • Add functions for generating Template Haskell expressions to be spliced, as alternatives to using the quasi-quoters


  • Add Template Haskell splice patterns d10Pat and d10ListPat
  • Define quotePat for the quasi-quoters d10 and d10list, so they can now be used with pattern matching
  • Add Integral a constraint to d10 and d10list in the Data.D10.Num module, because this is needed for the definition of quotePat.


  • Add CHANGELOG.md to package distribution


  • Add functions mod-10 arithmetic functions: (+), (-), (*)


  • Support GHC 8.8


  • Support GHC 8.10


  • Support doctest-0.17