Hi List, Twan,

I would argue the opposite: the function name indicates that it will transform a digit into an int. Digits in most cases any developer will deal with are `elem` [0 .. 9], so it would make more sense to produce an error for anything else, and provide a separate function, hexDigitToInt with the hex reading behavior. (This would be a silently breaking change, so I'd think carefully before seriously proposing this.) Twan is suggesting what amounts to englishAlphaOrDigitToInt; is there any particular reason to give the English alphabet special treatment in this case? I could instead imagine the usefulness of alphaPos :: Alphabet ->  Char ->  Int which indicates what position a given character is in its alphabet (alphaPos English 'a' == 1, for instance), and its inverse alphaFromPos ::  Alphabet -> Int -> Char.

But if I am trying to read a number from a String, I would almost certainly want it to fail on encountering any non-hex digit, rather than producing a strange number.

--
Dan Burton


On Fri, Jun 29, 2012 at 2:59 PM, Twan van Laarhoven <twanvl@gmail.com> wrote:
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

_______________________________________________
Libraries mailing list
Libraries@haskell.org
http://www.haskell.org/mailman/listinfo/libraries