d10-1: src/D10/Num.hs
{-# language Safe #-}
{- |
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@.
This module provides many functions for constructing 'D10'
values, including:
* @'integerD10Maybe' :: 'Num' a => 'Integer' -> 'Maybe' ('D10' a)@
* @'integerMod10' :: 'Num' a => 'Integer' -> 'D10' a@
There are also several ways to safely write 'D10' literals
using Template Haskell:
* With the @QuasiQuotes@ GHC extension enabled, you can write
use the quasi-quoters 'd10' and 'd10list'.
* With the @TemplateHaskell@ GHC extension enabled, you can
splice expressions produced by 'd10Exp' and 'd10ListExp'.
-}
module D10.Num
(
-- * Related modules
-- $modules
-- * Type
D10
-- ** Bounded
-- $bounded
-- ** Enum
-- $enum
-- ** Show
-- $show
-- * Quasi-quoters
, d10, d10list
-- * Splices
-- ** Expressions
, d10Exp, d10ListExp
-- ** Patterns
, d10Pat, d10ListPat
-- * Conversions
-- ** D10 / Char
, d10Char, charD10Maybe, charD10Either, charD10Fail
-- ** D10 / String
, d10Str, strD10Maybe, strD10Either, strD10Fail
-- ** [D10] / String
, strD10ListMaybe, strD10ListEither, strD10ListFail
-- ** D10 / Natural
, d10Nat, natD10Maybe, natD10Either, natD10Fail
, natMod10
-- ** D10 / Integer
, d10Integer, integerD10Maybe, integerD10Either
, integerD10Fail, integerMod10
-- ** D10 / Int
, d10Int, intD10Maybe, intD10Either, intD10Fail
, intMod10
-- ** D10 / general numeric types
, d10Num, integralD10Maybe, integralD10Either
, integralD10Fail, integralMod10
) where
import D10.Num.Conversions
import D10.Num.Type
import D10.Num.Quotes
import D10.Num.Splices
{- $modules
Additional functions related to this 'D10' type may be found in:
* "D10.Num.Arithmetic"
The contents of the following modules are re-exported here:
* "D10.Num.Conversions"
* "D10.Num.Quotes"
* "D10.Num.Splices"
* "D10.Num.Type"
The unsafe constructor for 'D10' can be found in:
* "D10.Num.Unsafe"
The following modules define @D10@ types in different ways
but are otherwise very similar to this one:
* "D10.Char"
* "D10.Safe"
-}
{- $bounded
>>> minBound :: D10 Integer
[d10|0|]
>>> maxBound :: D10 Integer
[d10|9|]
-}
{- $enum
>>> [ [d10|5|] .. ]
[d10list|56789|]
>>> [ [d10|4|] .. [d10|7|] ]
[d10list|4567|]
>>> [ [d10|5|], [d10|4|] .. ]
[d10list|543210|]
>>> [ [d10|1|], [d10|3|] .. ]
[d10list|13579|]
>>> [ minBound .. maxBound ] :: [D10 Integer]
[d10list|0123456789|]
-}
{- $show
'show' shows base-10 digits using the quasiquoters defined
in this module. A single digit is displayed using 'd10'.
A list of digits is displayed using 'd10list'.
-}