module Data.Type.Char.Digits where
import GHC.TypeLits
type family ParseBinaryDigit (ch :: Char) :: Maybe Natural where
ParseBinaryDigit '0' = 'Just 0
ParseBinaryDigit '1' = 'Just 1
ParseBinaryDigit _ = 'Nothing
type family ParseOctalDigit (ch :: Char) :: Maybe Natural where
ParseOctalDigit '0' = 'Just 0
ParseOctalDigit '1' = 'Just 1
ParseOctalDigit '2' = 'Just 2
ParseOctalDigit '3' = 'Just 3
ParseOctalDigit '4' = 'Just 4
ParseOctalDigit '5' = 'Just 5
ParseOctalDigit '6' = 'Just 6
ParseOctalDigit '7' = 'Just 7
ParseOctalDigit _ = 'Nothing
type family ParseDecimalDigit (ch :: Char) :: Maybe Natural where
ParseDecimalDigit '0' = 'Just 0
ParseDecimalDigit '1' = 'Just 1
ParseDecimalDigit '2' = 'Just 2
ParseDecimalDigit '3' = 'Just 3
ParseDecimalDigit '4' = 'Just 4
ParseDecimalDigit '5' = 'Just 5
ParseDecimalDigit '6' = 'Just 6
ParseDecimalDigit '7' = 'Just 7
ParseDecimalDigit '8' = 'Just 8
ParseDecimalDigit '9' = 'Just 9
ParseDecimalDigit _ = 'Nothing
type family ParseHexDigit (ch :: Char) :: Maybe Natural where
ParseHexDigit '0' = 'Just 0
ParseHexDigit '1' = 'Just 1
ParseHexDigit '2' = 'Just 2
ParseHexDigit '3' = 'Just 3
ParseHexDigit '4' = 'Just 4
ParseHexDigit '5' = 'Just 5
ParseHexDigit '6' = 'Just 6
ParseHexDigit '7' = 'Just 7
ParseHexDigit '8' = 'Just 8
ParseHexDigit '9' = 'Just 9
ParseHexDigit 'a' = 'Just 10
ParseHexDigit 'A' = 'Just 10
ParseHexDigit 'b' = 'Just 11
ParseHexDigit 'B' = 'Just 11
ParseHexDigit 'c' = 'Just 12
ParseHexDigit 'C' = 'Just 12
ParseHexDigit 'd' = 'Just 13
ParseHexDigit 'D' = 'Just 13
ParseHexDigit 'e' = 'Just 14
ParseHexDigit 'E' = 'Just 14
ParseHexDigit 'f' = 'Just 15
ParseHexDigit 'F' = 'Just 15
ParseHexDigit _ = 'Nothing