{-# language Safe #-}

{- |

Defines a 'D10' type as
@'D0' | 'D1' | 'D2' | 'D3' | 'D4' | 'D5' | 'D6' | 'D7' | 'D8' | 'D9'@.

-}

module D10.Safe
    (
    -- * Related modules
    -- $modules

    -- * Type
      D10 (..)

    -- ** Bounded
    -- $bounded

    -- ** Enum
    -- $enum

    -- * Quasi-quoters
    , d10list

    -- * Splices
    -- ** Expressions
    , d10ListExp
    -- ** Patterns
    , 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.Safe.Conversions
import D10.Safe.Quotes
import D10.Safe.Splices
import D10.Safe.Type

{- $modules

Additional functions related to this 'D10' type may be found in:

  * "D10.Safe.Arithmetic"

The contents of the following modules are re-exported here:

  * "D10.Safe.Type"
  * "D10.Safe.Conversions"
  * "D10.Safe.Quotes"
  * "D10.Safe.Splices"

The following modules define @D10@ types in different ways
but are otherwise very similar to this one:

  * "D10.Char"
  * "D10.Num"

This module is called "safe" because, in contrast with the
alternative representations of a digit defined in the other
modules, this 'D10' type does not include any possibility
of representing an invalid non-digit value.

-}

{- $bounded

>>> minBound :: D10
D0

>>> maxBound :: D10
D9

-}

{- $enum

>>> [ D5 .. ]
[D5,D6,D7,D8,D9]

>>> [ D4 .. D7 ]
[D4,D5,D6,D7]

>>> [ D5, D4 .. ]
[D5,D4,D3,D2,D1,D0]

>>> [ D1, D3 .. ]
[D1,D3,D5,D7,D9]

>>> [ minBound .. maxBound ] :: [D10]
[D0,D1,D2,D3,D4,D5,D6,D7,D8,D9]

-}