digit-0.2.3: A data-type representing digits 0-9 and other combinations

Safe HaskellNone
LanguageHaskell2010

Data.Digit

Contents

Description

A data type with ten nullary constructors [0-9] and combinators.

Synopsis

Data type

Destructors

foldDigit Source

Arguments

:: a

Zero.

-> a

One.

-> a

Two.

-> a

Three.

-> a

Four.

-> a

Five.

-> a

Six.

-> a

Seven.

-> a

Eight.

-> a

Nine.

-> Digit

The digit to fold.

-> a 

Catamorphism for Digit.

foldDigit q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 D0 == q0
foldDigit q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 D1 == q1
foldDigit q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 D2 == q2
foldDigit q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 D3 == q3
foldDigit q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 D4 == q4
foldDigit q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 D5 == q5
foldDigit q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 D6 == q6
foldDigit q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 D7 == q7
foldDigit q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 D8 == q8
foldDigit q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 D9 == q9

Prisms

class D0 d where Source

Methods

d0 :: Prism' d () Source

Instances

x0 :: D0 d => d Source

class D1 d where Source

Methods

d1 :: Prism' d () Source

Instances

x1 :: D1 d => d Source

class D2 d where Source

Methods

d2 :: Prism' d () Source

Instances

x2 :: D2 d => d Source

class D3 d where Source

Methods

d3 :: Prism' d () Source

Instances

x3 :: D3 d => d Source

class D4 d where Source

Methods

d4 :: Prism' d () Source

Instances

x4 :: D4 d => d Source

class D5 d where Source

Methods

d5 :: Prism' d () Source

Instances

x5 :: D5 d => d Source

class D6 d where Source

Methods

d6 :: Prism' d () Source

Instances

x6 :: D6 d => d Source

class D7 d where Source

Methods

d7 :: Prism' d () Source

Instances

x7 :: D7 d => d Source

class D8 d where Source

Methods

d8 :: Prism' d () Source

Instances

x8 :: D8 d => d Source

class D9 d where Source

Methods

d9 :: Prism' d () Source

Instances

x9 :: D9 d => d Source

digit :: Prism' Int Digit Source

A prism for using Int as Digit.

>>> 5 ^? digit
Just 5
>>> 0 ^? digit
Just 0
>>> 9 ^? digit
Just 9
>>> 10 ^? digit
Nothing
>>> (-5) ^? digit
Nothing
>>> digit # D5
5
>>> digit # D9
9
>>> digit # D0
0

digitC :: Prism' Char Digit Source

A prism for using Char as Digit.

>>> '5' ^? digitC
Just 5
>>> '0' ^? digitC
Just 0
>>> '9' ^? digitC
Just 9
>>> 'a' ^? digitC
Nothing
>>> '@' ^? digitC
Nothing
>>> digitC # D5
'5'
>>> digitC # D9
'9'
>>> digitC # D0
'0'

digits :: Prism' Int [Digit] Source

A prism for the list of digits in an integer

>>> 1234 ^? digits
Just [1,2,3,4]
>>> 0 ^? digits
Just []
>>> 1 ^? digits
Just [1]
>>> 90 ^? digits
Just [9,0]
>>> 05 ^? digits
Just [5]
>>> 105 ^? digits
Just [1,0,5]
>>> (-1) ^? digits
Nothing

λ> digits # [D0] 0

>>> digits # [D0, D1]
1
>>> digits # [D1]
1
>>> digits # [D1, D2, D3]
123
>>> digits # [D1, D0, D3]
103
>>> digits # [D1, D0, D3, D0]
1030

mod operations

mod10 :: Int -> Digit Source

Modulus with 10.

>>> mod10 0
0
>>> mod10 1
1
>>> mod10 8
8
>>> mod10 9
9
>>> mod10 10
0
>>> mod10 90
0
>>> mod10 91
1
>>> mod10 (-1)
9

divMod10 :: Int -> (Int, Digit) Source

Division/modulus with 10.

λ> divMod10 0 (0,0)

>>> divMod10 1
(0,1)
>>> divMod10 8
(0,8)
>>> divMod10 9
(0,9)
>>> divMod10 10
(1,0)
>>> divMod10 90
(9,0)
>>> divMod10 91
(9,1)
>>> divMod10 (-1)
(-1,9)

Parsers

Quasi-Quoters

digitQ :: QuasiQuoter Source

A QuasiQuoter for any range of Digit.

digitQ|4|
:: Digit 4

named [digitQ|4|] = "four" named [digitQ|$x|] = "not four, " ++ show x ++ " instead"

mod10D x = let y = mod x 10 in [digitQ|$y|]