
#9573: Add warning for invalid digits in integer literals -------------------------------------+------------------------------------- Reporter: vlopez | Owner: Type: bug | Status: new Priority: normal | Milestone: 7.10.1 Component: Compiler (Parser) | Version: 7.9 Keywords: parsing, integer, | Operating System: octal, binary, hexadecimal, | Unknown/Multiple Architecture: Unknown/Multiple | Type of failure: Difficulty: Difficult (2-5 | None/Unknown days) | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: -------------------------------------+------------------------------------- In its latest version, GHC can parse binary (with `-XBinaryLiterals`), octal and hexadecimal literals: {{{#!hs
0b101010 0o52 0x2A }}}
Currently, the parser/lexer reads digits from the input as long as they are valid for the specified radix. All subsequent digits are interpreted as a new, separate token. If the user uses a digit which isn't valid for the radix, it may be reported with a non-obvious error message, or interpreted in surprising ways: {{{#!hs
:t 0o567 0o576 :: Num a => a :t 0o5678 0o5678 :: (Num (a -> t), Num a) => t Prelude> :t 0x1bfah
<interactive>:1:7: Not in scope: ‘h’
replicate 0o5678 [8,8,8,8,8,8,8... }}}
We suggest warning the user when a literal of this sort is written, while respecting any other error messages and the original behaviour. More specifically, the parser or lexer would give a warning if a token starting with an alphanumeric character is found immediately after a numeric literal, without a blank between them. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9573 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler