Unicode.Char.Numeric
Numeric character property related functions.
Since: 0.3.0
Predicates
isNumeric :: Char -> Bool Source #
Selects Unicode character with a numeric value.
Note: a character may have a numeric value but return False
with
the predicate isNumber
, because
isNumber
only tests
GeneralCategory
: some CJK characters are
OtherLetter
and do have a numeric value.
isNumeric c == isJust (numericValue c)
Since: 0.3.1
Numeric values
numericValue :: Char -> Maybe Rational Source #
Numeric value of a character, if relevant.
Note: a character may have a numeric value but return False
with
the predicate isNumber
, because
isNumber
only tests
GeneralCategory
: some CJK characters are
OtherLetter
and do have a numeric value.
Since: 0.3.1
integerValue :: Integral a => Char -> Maybe a Source #
Integer value of a character, if relevant.
This is a special case of numericValue
.
Warning: There is a risk of integer overflow depending of the chosen concrete return type. As of Unicode 15.1 the results range from 0 to 1e16.
>>>
minimum [v | v@Just{} <- integerValue <$> [minBound..]] :: Maybe Integer
Just 0>>>
maximum (integerValue <$> [minBound..]) :: Maybe Integer
Just 10000000000000000>>>
integerValue '\x4EAC' :: Maybe Int64 -- OK
Just 10000000000000000>>>
integerValue '\x4EAC' :: Maybe Int32 -- Will overflow!
Just 1874919424
Therefore it is advised to use:
.integerValue
@Int64
Note: A character may have a numeric value but return False
with
the predicate isNumber
, because
isNumber
only tests
GeneralCategory
: some CJK characters are
OtherLetter
and do have a numeric value.
Since: 0.3.1
Single digit characters
intToDigiT :: Int -> Char Source #
Re-export from base
isOctDigit :: Char -> Bool Source #
Selects ASCII octal digits, i.e. '0'
..'7'
.
isHexDigit :: Char -> Bool Source #
Selects ASCII hexadecimal digits,
i.e. '0'
..'9'
, 'a'
..'f'
, 'A'
..'F'
.
digitToInt :: Char -> Int Source #
Convert a single digit Char
to the corresponding Int
. This
function fails unless its argument satisfies isHexDigit
, but
recognises both upper- and lower-case hexadecimal digits (that
is, '0'
..'9'
, 'a'
..'f'
, 'A'
..'F'
).
Examples
Characters '0'
through '9'
are converted properly to
0..9
:
>>>
map digitToInt ['0'..'9']
[0,1,2,3,4,5,6,7,8,9]
Both upper- and lower-case 'A'
through 'F'
are converted
as well, to 10..15
.
>>>
map digitToInt ['a'..'f']
[10,11,12,13,14,15]>>>
map digitToInt ['A'..'F']
[10,11,12,13,14,15]
Anything else throws an exception:
>>>
digitToInt 'G'
*** Exception: Char.digitToInt: not a digit 'G'>>>
digitToInt '♥'
*** Exception: Char.digitToInt: not a digit '\9829'