HORIZON HASKELLDocslts/ghc-10.0.x8fef28d2026-11-02Search packagesCtrl K
Theme: |

GHC 10.0.0.20260917 · lts/ghc-10.0.x · 8fef28d · 2026-11-02

Moduleunicode-data-0.9.0Haskell2010

Unicode.Char.Numeric

Numeric character property related functions.

Contents
  1. Predicates
  2. Numeric values
  3. Single digit characters
  4. Re-export from base
Synopsis

Predicates

Numeric values

valueintegerValue :: Integral a => Char -> Maybe a

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.

Example4 expressions
minimum [v | v@Just{} <- integerValue <$> [minBound..]] :: Maybe IntegerJust 0maximum (integerValue <$> [minBound..]) :: Maybe IntegerJust 10000000000000000integerValue '\x4EAC' :: Maybe Int64 -- OKJust 10000000000000000integerValue '\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.

Single digit characters

Re-export from base

valuedigitToInt :: Char -> Int

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:

Example1 expression
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.

Example2 expressions
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:

Example2 expressions
digitToInt 'G'*** Exception: Char.digitToInt: not a digit 'G'digitToInt '♥'*** Exception: Char.digitToInt: not a digit '\9829'
valueintToDigit :: Int -> Char

Convert an Int in the range 0..15 to the corresponding single digit Char. This function fails on other inputs, and generates lower-case hexadecimal digits.