GHC's readLitChar does not conform to 98
Akim Demaille
akim@epita.fr
Wed, 05 Mar 2003 14:50:11 +0100
Hi!
I believe the implementation of readLitChar (and lexLitChar) does not
conform to the documentation, and this results in GHC and Hugs
disagreeing on the following code:
----------------------------------------
module Main (main)
where
import IO (stderr, hPutStrLn)
import Char (digitToInt, lexLitChar, readLitChar)
main :: IO ()
main =
do hPutStrLn stderr (show $ readLitChar "A")
hPutStrLn stderr (show $ readLitChar "'A'")
----------------------------------------
ghc says:
/tmp % ghc --version nostromo 14:45
The Glorious Glasgow Haskell Compilation System, version 5.04.2
/tmp % /tmp/a.out nostromo 14:46
[]
[('A',"")]
and Hugs says:
/tmp % runhugs Main.hs nostromo Err 1
[('A',"")]
[('\'',"A'")]
The doc seems to agree with Hugs (thanks to sebc for the pointer):
<http://www.haskell.org/onlinereport/char.html>
> The function showLitChar converts a character to a string using only
> printable characters, using Haskell source-language escape
> conventions. The function lexLitChar does the reverse, returning the
> sequence of characters that encode the character. The function
> readLitChar does the same, but in addition converts the to the
> character that it encodes. For example:
>
> showLitChar '\n' s = "\\n" ++ s
> lexLitChar "\\nHello" = [("\\n", "Hello")]
> readLitChar "\\nHello" = [('\n', "Hello")]