{-# LANGUAGE NoImplicitPrelude #-}
module Data.Digit.Char(
charBinaryNoZero
, charBinary
, charOctalNoZero
, charOctal
, charDecimalNoZero
, charDecimal
, charHexadecimalNoZero
, charHexadecimal
, charHEXADECIMALNoZero
, charHEXADECIMAL
, charHeXaDeCiMaLNoZero
, charHeXaDeCiMaL
) where
import Prelude (Char, Eq, fst, lookup)
import Control.Applicative (Applicative)
import Control.Lens (APrism, Choice, Prism', clonePrism,
prism', ( # ))
import Control.Lens.Extras (is)
import Data.Foldable (find)
import Data.Functor ((<$>))
import Data.Maybe (fromMaybe)
import Data.Digit.Binary as D
import Data.Digit.Decimal as D
import Data.Digit.Hexadecimal.LowerCase as D
import Data.Digit.Hexadecimal.UpperCase as D
import Data.Digit.Hexadecimal.MixedCase as D
import Data.Digit.Octal as D
charBinaryNoZero ::
BinaryNoZero d =>
Prism'
Char
d
charBinaryNoZero :: Prism' Char d
charBinaryNoZero =
(Char, APrism d d () ())
-> [(Char, APrism d d () ())] -> p d (f d) -> p Char (f Char)
forall b (p :: * -> * -> *) (f :: * -> *) a.
(Eq b, Choice p, Applicative f) =>
(b, APrism a a () ())
-> [(b, APrism a a () ())] -> p a (f a) -> p b (f b)
associatePrism (Char
'1', APrism d d () ()
forall d. D1 d => Prism' d ()
d1) []
charBinary ::
Binary d =>
Prism'
Char
d
charBinary :: Prism' Char d
charBinary =
(Char, APrism d d () ())
-> [(Char, APrism d d () ())] -> p d (f d) -> p Char (f Char)
forall b (p :: * -> * -> *) (f :: * -> *) a.
(Eq b, Choice p, Applicative f) =>
(b, APrism a a () ())
-> [(b, APrism a a () ())] -> p a (f a) -> p b (f b)
associatePrism (Char
'0', APrism d d () ()
forall d. D0 d => Prism' d ()
d0) [(Char
'1', APrism d d () ()
forall d. D1 d => Prism' d ()
d1)]
charOctalNoZero ::
OctalNoZero d =>
Prism'
Char
d
charOctalNoZero :: Prism' Char d
charOctalNoZero =
(Char, APrism d d () ())
-> [(Char, APrism d d () ())] -> p d (f d) -> p Char (f Char)
forall b (p :: * -> * -> *) (f :: * -> *) a.
(Eq b, Choice p, Applicative f) =>
(b, APrism a a () ())
-> [(b, APrism a a () ())] -> p a (f a) -> p b (f b)
associatePrism (Char
'1', APrism d d () ()
forall d. D1 d => Prism' d ()
d1) [(Char
'2', APrism d d () ()
forall d. D2 d => Prism' d ()
d2), (Char
'3', APrism d d () ()
forall d. D3 d => Prism' d ()
d3), (Char
'4', APrism d d () ()
forall d. D4 d => Prism' d ()
d4), (Char
'5', APrism d d () ()
forall d. D5 d => Prism' d ()
d5), (Char
'6', APrism d d () ()
forall d. D6 d => Prism' d ()
d6), (Char
'7', APrism d d () ()
forall d. D7 d => Prism' d ()
d7)]
charOctal ::
Octal d =>
Prism'
Char
d
charOctal :: Prism' Char d
charOctal =
(Char, APrism d d () ())
-> [(Char, APrism d d () ())] -> p d (f d) -> p Char (f Char)
forall b (p :: * -> * -> *) (f :: * -> *) a.
(Eq b, Choice p, Applicative f) =>
(b, APrism a a () ())
-> [(b, APrism a a () ())] -> p a (f a) -> p b (f b)
associatePrism (Char
'0', APrism d d () ()
forall d. D0 d => Prism' d ()
d0) [(Char
'1', APrism d d () ()
forall d. D1 d => Prism' d ()
d1), (Char
'2', APrism d d () ()
forall d. D2 d => Prism' d ()
d2), (Char
'3', APrism d d () ()
forall d. D3 d => Prism' d ()
d3), (Char
'4', APrism d d () ()
forall d. D4 d => Prism' d ()
d4), (Char
'5', APrism d d () ()
forall d. D5 d => Prism' d ()
d5), (Char
'6', APrism d d () ()
forall d. D6 d => Prism' d ()
d6), (Char
'7', APrism d d () ()
forall d. D7 d => Prism' d ()
d7)]
charDecimalNoZero ::
DecimalNoZero d =>
Prism'
Char
d
charDecimalNoZero :: Prism' Char d
charDecimalNoZero =
(Char, APrism d d () ())
-> [(Char, APrism d d () ())] -> p d (f d) -> p Char (f Char)
forall b (p :: * -> * -> *) (f :: * -> *) a.
(Eq b, Choice p, Applicative f) =>
(b, APrism a a () ())
-> [(b, APrism a a () ())] -> p a (f a) -> p b (f b)
associatePrism (Char
'1', APrism d d () ()
forall d. D1 d => Prism' d ()
d1) [(Char
'2', APrism d d () ()
forall d. D2 d => Prism' d ()
d2), (Char
'3', APrism d d () ()
forall d. D3 d => Prism' d ()
d3), (Char
'4', APrism d d () ()
forall d. D4 d => Prism' d ()
d4), (Char
'5', APrism d d () ()
forall d. D5 d => Prism' d ()
d5), (Char
'6', APrism d d () ()
forall d. D6 d => Prism' d ()
d6), (Char
'7', APrism d d () ()
forall d. D7 d => Prism' d ()
d7), (Char
'8', APrism d d () ()
forall d. D8 d => Prism' d ()
d8), (Char
'9', APrism d d () ()
forall d. D9 d => Prism' d ()
d9)]
charDecimal ::
Decimal d =>
Prism'
Char
d
charDecimal :: Prism' Char d
charDecimal =
(Char, APrism d d () ())
-> [(Char, APrism d d () ())] -> p d (f d) -> p Char (f Char)
forall b (p :: * -> * -> *) (f :: * -> *) a.
(Eq b, Choice p, Applicative f) =>
(b, APrism a a () ())
-> [(b, APrism a a () ())] -> p a (f a) -> p b (f b)
associatePrism (Char
'0', APrism d d () ()
forall d. D0 d => Prism' d ()
d0) [(Char
'1', APrism d d () ()
forall d. D1 d => Prism' d ()
d1), (Char
'2', APrism d d () ()
forall d. D2 d => Prism' d ()
d2), (Char
'3', APrism d d () ()
forall d. D3 d => Prism' d ()
d3), (Char
'4', APrism d d () ()
forall d. D4 d => Prism' d ()
d4), (Char
'5', APrism d d () ()
forall d. D5 d => Prism' d ()
d5), (Char
'6', APrism d d () ()
forall d. D6 d => Prism' d ()
d6), (Char
'7', APrism d d () ()
forall d. D7 d => Prism' d ()
d7), (Char
'8', APrism d d () ()
forall d. D8 d => Prism' d ()
d8), (Char
'9', APrism d d () ()
forall d. D9 d => Prism' d ()
d9)]
charHexadecimalNoZero ::
HexadecimalNoZero d =>
Prism'
Char
d
charHexadecimalNoZero :: Prism' Char d
charHexadecimalNoZero =
(Char, APrism d d () ())
-> [(Char, APrism d d () ())] -> p d (f d) -> p Char (f Char)
forall b (p :: * -> * -> *) (f :: * -> *) a.
(Eq b, Choice p, Applicative f) =>
(b, APrism a a () ())
-> [(b, APrism a a () ())] -> p a (f a) -> p b (f b)
associatePrism (Char
'1', APrism d d () ()
forall d. D1 d => Prism' d ()
d1) [(Char
'2', APrism d d () ()
forall d. D2 d => Prism' d ()
d2), (Char
'3', APrism d d () ()
forall d. D3 d => Prism' d ()
d3), (Char
'4', APrism d d () ()
forall d. D4 d => Prism' d ()
d4), (Char
'5', APrism d d () ()
forall d. D5 d => Prism' d ()
d5), (Char
'6', APrism d d () ()
forall d. D6 d => Prism' d ()
d6), (Char
'7', APrism d d () ()
forall d. D7 d => Prism' d ()
d7), (Char
'8', APrism d d () ()
forall d. D8 d => Prism' d ()
d8), (Char
'9', APrism d d () ()
forall d. D9 d => Prism' d ()
d9), (Char
'a', APrism d d () ()
forall d. Da d => Prism' d ()
da), (Char
'b', APrism d d () ()
forall d. Db d => Prism' d ()
db), (Char
'c', APrism d d () ()
forall d. Dc d => Prism' d ()
dc), (Char
'd', APrism d d () ()
forall d. Dd d => Prism' d ()
dd), (Char
'e', APrism d d () ()
forall d. De d => Prism' d ()
de), (Char
'f', APrism d d () ()
forall d. Df d => Prism' d ()
df)]
charHexadecimal ::
Hexadecimal d =>
Prism'
Char
d
charHexadecimal :: Prism' Char d
charHexadecimal =
(Char, APrism d d () ())
-> [(Char, APrism d d () ())] -> p d (f d) -> p Char (f Char)
forall b (p :: * -> * -> *) (f :: * -> *) a.
(Eq b, Choice p, Applicative f) =>
(b, APrism a a () ())
-> [(b, APrism a a () ())] -> p a (f a) -> p b (f b)
associatePrism (Char
'0', APrism d d () ()
forall d. D0 d => Prism' d ()
d0) [(Char
'1', APrism d d () ()
forall d. D1 d => Prism' d ()
d1), (Char
'2', APrism d d () ()
forall d. D2 d => Prism' d ()
d2), (Char
'3', APrism d d () ()
forall d. D3 d => Prism' d ()
d3), (Char
'4', APrism d d () ()
forall d. D4 d => Prism' d ()
d4), (Char
'5', APrism d d () ()
forall d. D5 d => Prism' d ()
d5), (Char
'6', APrism d d () ()
forall d. D6 d => Prism' d ()
d6), (Char
'7', APrism d d () ()
forall d. D7 d => Prism' d ()
d7), (Char
'8', APrism d d () ()
forall d. D8 d => Prism' d ()
d8), (Char
'9', APrism d d () ()
forall d. D9 d => Prism' d ()
d9), (Char
'a', APrism d d () ()
forall d. Da d => Prism' d ()
da), (Char
'b', APrism d d () ()
forall d. Db d => Prism' d ()
db), (Char
'c', APrism d d () ()
forall d. Dc d => Prism' d ()
dc), (Char
'd', APrism d d () ()
forall d. Dd d => Prism' d ()
dd), (Char
'e', APrism d d () ()
forall d. De d => Prism' d ()
de), (Char
'f', APrism d d () ()
forall d. Df d => Prism' d ()
df)]
charHEXADECIMALNoZero ::
HEXADECIMALNoZero d =>
Prism'
Char
d
charHEXADECIMALNoZero :: Prism' Char d
charHEXADECIMALNoZero =
(Char, APrism d d () ())
-> [(Char, APrism d d () ())] -> p d (f d) -> p Char (f Char)
forall b (p :: * -> * -> *) (f :: * -> *) a.
(Eq b, Choice p, Applicative f) =>
(b, APrism a a () ())
-> [(b, APrism a a () ())] -> p a (f a) -> p b (f b)
associatePrism (Char
'1', APrism d d () ()
forall d. D1 d => Prism' d ()
d1) [(Char
'2', APrism d d () ()
forall d. D2 d => Prism' d ()
d2), (Char
'3', APrism d d () ()
forall d. D3 d => Prism' d ()
d3), (Char
'4', APrism d d () ()
forall d. D4 d => Prism' d ()
d4), (Char
'5', APrism d d () ()
forall d. D5 d => Prism' d ()
d5), (Char
'6', APrism d d () ()
forall d. D6 d => Prism' d ()
d6), (Char
'7', APrism d d () ()
forall d. D7 d => Prism' d ()
d7), (Char
'8', APrism d d () ()
forall d. D8 d => Prism' d ()
d8), (Char
'9', APrism d d () ()
forall d. D9 d => Prism' d ()
d9), (Char
'A', APrism d d () ()
forall d. DA d => Prism' d ()
dA), (Char
'B', APrism d d () ()
forall d. DB d => Prism' d ()
dB), (Char
'C', APrism d d () ()
forall d. DC d => Prism' d ()
dC), (Char
'D', APrism d d () ()
forall d. DD d => Prism' d ()
dD), (Char
'E', APrism d d () ()
forall d. DE d => Prism' d ()
dE), (Char
'F', APrism d d () ()
forall d. DF d => Prism' d ()
dF)]
charHEXADECIMAL ::
HEXADECIMAL d =>
Prism'
Char
d
charHEXADECIMAL :: Prism' Char d
charHEXADECIMAL =
(Char, APrism d d () ())
-> [(Char, APrism d d () ())] -> p d (f d) -> p Char (f Char)
forall b (p :: * -> * -> *) (f :: * -> *) a.
(Eq b, Choice p, Applicative f) =>
(b, APrism a a () ())
-> [(b, APrism a a () ())] -> p a (f a) -> p b (f b)
associatePrism (Char
'0', APrism d d () ()
forall d. D0 d => Prism' d ()
d0) [(Char
'1', APrism d d () ()
forall d. D1 d => Prism' d ()
d1), (Char
'2', APrism d d () ()
forall d. D2 d => Prism' d ()
d2), (Char
'3', APrism d d () ()
forall d. D3 d => Prism' d ()
d3), (Char
'4', APrism d d () ()
forall d. D4 d => Prism' d ()
d4), (Char
'5', APrism d d () ()
forall d. D5 d => Prism' d ()
d5), (Char
'6', APrism d d () ()
forall d. D6 d => Prism' d ()
d6), (Char
'7', APrism d d () ()
forall d. D7 d => Prism' d ()
d7), (Char
'8', APrism d d () ()
forall d. D8 d => Prism' d ()
d8), (Char
'9', APrism d d () ()
forall d. D9 d => Prism' d ()
d9), (Char
'A', APrism d d () ()
forall d. DA d => Prism' d ()
dA), (Char
'B', APrism d d () ()
forall d. DB d => Prism' d ()
dB), (Char
'C', APrism d d () ()
forall d. DC d => Prism' d ()
dC), (Char
'D', APrism d d () ()
forall d. DD d => Prism' d ()
dD), (Char
'E', APrism d d () ()
forall d. DE d => Prism' d ()
dE), (Char
'F', APrism d d () ()
forall d. DF d => Prism' d ()
dF)]
charHeXaDeCiMaLNoZero ::
HeXaDeCiMaLNoZero d =>
Prism'
Char
d
charHeXaDeCiMaLNoZero :: Prism' Char d
charHeXaDeCiMaLNoZero =
(Char, APrism d d () ())
-> [(Char, APrism d d () ())] -> p d (f d) -> p Char (f Char)
forall b (p :: * -> * -> *) (f :: * -> *) a.
(Eq b, Choice p, Applicative f) =>
(b, APrism a a () ())
-> [(b, APrism a a () ())] -> p a (f a) -> p b (f b)
associatePrism (Char
'1', APrism d d () ()
forall d. D1 d => Prism' d ()
d1) [(Char
'2', APrism d d () ()
forall d. D2 d => Prism' d ()
d2), (Char
'3', APrism d d () ()
forall d. D3 d => Prism' d ()
d3), (Char
'4', APrism d d () ()
forall d. D4 d => Prism' d ()
d4), (Char
'5', APrism d d () ()
forall d. D5 d => Prism' d ()
d5), (Char
'6', APrism d d () ()
forall d. D6 d => Prism' d ()
d6), (Char
'7', APrism d d () ()
forall d. D7 d => Prism' d ()
d7), (Char
'8', APrism d d () ()
forall d. D8 d => Prism' d ()
d8), (Char
'9', APrism d d () ()
forall d. D9 d => Prism' d ()
d9), (Char
'a', APrism d d () ()
forall d. Da d => Prism' d ()
da), (Char
'b', APrism d d () ()
forall d. Db d => Prism' d ()
db), (Char
'c', APrism d d () ()
forall d. Dc d => Prism' d ()
dc), (Char
'd', APrism d d () ()
forall d. Dd d => Prism' d ()
dd), (Char
'e', APrism d d () ()
forall d. De d => Prism' d ()
de), (Char
'f', APrism d d () ()
forall d. Df d => Prism' d ()
df), (Char
'A', APrism d d () ()
forall d. DA d => Prism' d ()
dA), (Char
'B', APrism d d () ()
forall d. DB d => Prism' d ()
dB), (Char
'C', APrism d d () ()
forall d. DC d => Prism' d ()
dC), (Char
'D', APrism d d () ()
forall d. DD d => Prism' d ()
dD), (Char
'E', APrism d d () ()
forall d. DE d => Prism' d ()
dE), (Char
'F', APrism d d () ()
forall d. DF d => Prism' d ()
dF)]
charHeXaDeCiMaL ::
HeXaDeCiMaL d =>
Prism'
Char
d
charHeXaDeCiMaL :: Prism' Char d
charHeXaDeCiMaL =
(Char, APrism d d () ())
-> [(Char, APrism d d () ())] -> p d (f d) -> p Char (f Char)
forall b (p :: * -> * -> *) (f :: * -> *) a.
(Eq b, Choice p, Applicative f) =>
(b, APrism a a () ())
-> [(b, APrism a a () ())] -> p a (f a) -> p b (f b)
associatePrism (Char
'0', APrism d d () ()
forall d. D0 d => Prism' d ()
d0) [(Char
'1', APrism d d () ()
forall d. D1 d => Prism' d ()
d1), (Char
'2', APrism d d () ()
forall d. D2 d => Prism' d ()
d2), (Char
'3', APrism d d () ()
forall d. D3 d => Prism' d ()
d3), (Char
'4', APrism d d () ()
forall d. D4 d => Prism' d ()
d4), (Char
'5', APrism d d () ()
forall d. D5 d => Prism' d ()
d5), (Char
'6', APrism d d () ()
forall d. D6 d => Prism' d ()
d6), (Char
'7', APrism d d () ()
forall d. D7 d => Prism' d ()
d7), (Char
'8', APrism d d () ()
forall d. D8 d => Prism' d ()
d8), (Char
'9', APrism d d () ()
forall d. D9 d => Prism' d ()
d9), (Char
'a', APrism d d () ()
forall d. Da d => Prism' d ()
da), (Char
'b', APrism d d () ()
forall d. Db d => Prism' d ()
db), (Char
'c', APrism d d () ()
forall d. Dc d => Prism' d ()
dc), (Char
'd', APrism d d () ()
forall d. Dd d => Prism' d ()
dd), (Char
'e', APrism d d () ()
forall d. De d => Prism' d ()
de), (Char
'f', APrism d d () ()
forall d. Df d => Prism' d ()
df), (Char
'A', APrism d d () ()
forall d. DA d => Prism' d ()
dA), (Char
'B', APrism d d () ()
forall d. DB d => Prism' d ()
dB), (Char
'C', APrism d d () ()
forall d. DC d => Prism' d ()
dC), (Char
'D', APrism d d () ()
forall d. DD d => Prism' d ()
dD), (Char
'E', APrism d d () ()
forall d. DE d => Prism' d ()
dE), (Char
'F', APrism d d () ()
forall d. DF d => Prism' d ()
dF)]
associatePrism ::
(Eq b, Choice p, Applicative f) =>
(b, APrism a a () ())
-> [(b, APrism a a () ())]
-> p a (f a)
-> p b (f b)
associatePrism :: (b, APrism a a () ())
-> [(b, APrism a a () ())] -> p a (f a) -> p b (f b)
associatePrism (b, APrism a a () ())
def [(b, APrism a a () ())]
z =
(a -> b) -> (b -> Maybe a) -> Prism b b a a
forall b s a. (b -> s) -> (s -> Maybe a) -> Prism s s a b
prism'
(\a
d -> (b, APrism a a () ()) -> b
forall a b. (a, b) -> a
fst ((b, APrism a a () ())
-> Maybe (b, APrism a a () ()) -> (b, APrism a a () ())
forall a. a -> Maybe a -> a
fromMaybe (b, APrism a a () ())
def (((b, APrism a a () ()) -> Bool)
-> [(b, APrism a a () ())] -> Maybe (b, APrism a a () ())
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Maybe a
find (\(b
_, APrism a a () ()
w) -> APrism a a () () -> a -> Bool
forall s t a b. APrism s t a b -> s -> Bool
is APrism a a () ()
w a
d) [(b, APrism a a () ())]
z)))
(\b
i -> (\APrism a a () ()
p -> APrism a a () () -> Prism a a () ()
forall s t a b. APrism s t a b -> Prism s t a b
clonePrism APrism a a () ()
p (Tagged () (Identity ()) -> Tagged a (Identity a)) -> () -> a
forall t b. AReview t b -> b -> t
# ()) (APrism a a () () -> a) -> Maybe (APrism a a () ()) -> Maybe a
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> b -> [(b, APrism a a () ())] -> Maybe (APrism a a () ())
forall a b. Eq a => a -> [(a, b)] -> Maybe b
lookup b
i ((b, APrism a a () ())
def(b, APrism a a () ())
-> [(b, APrism a a () ())] -> [(b, APrism a a () ())]
forall a. a -> [a] -> [a]
:[(b, APrism a a () ())]
z))