Proposal: Make digitToInt and intToDigit work up to base 36
Twan van Laarhoven
twanvl at gmail.com
Fri Jun 29 22:59:11 CEST 2012
Hello List,
I propose to change the functions digitToInt and intToDigit in Data.Char to
digitToInt :: Char -> Int
digitToInt c
| isDigit c = ord c - ord '0'
| c >= 'a' && c <= 'z' = ord c - ord 'a' + 10
| c >= 'A' && c <= 'Z' = ord c - ord 'A' + 10
| otherwise = error ("Char.digitToInt: not a digit " ++ show c)
intToDigit :: Int -> Char
intToDigit i
| i >= 0 && i <= 9 = toEnum (fromEnum '0' + i)
| i >= 10 && i <= 35 = toEnum (fromEnum 'a' + i - 10)
| otherwise = error "Char.intToDigit: not a digit"
(and equivalently for the Ghc specialized version in Data.Show)
Right now the functions only work for c <= 'f' and i <= 15, i.e. only up to
hexadecimal. But I can think of no reason why that should be the case.
There is the problem of compatibility with the Haskell98/2010 report. But since
this proposed change only reduces the number of cases that are errors, I think
that is not a big concern.
Discussion period: 2 weeks, deadline July 13.
Twan
More information about the Libraries
mailing list