{-# 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))