[GHC] #10583: Chaos in Lexeme.hs

GHC ghc-devs at haskell.org
Sat Jun 27 14:28:01 UTC 2015


#10583: Chaos in Lexeme.hs
-------------------------------------+-------------------------------------
              Reporter:  goldfire    |             Owner:  goldfire
                  Type:  bug         |            Status:  new
              Priority:  normal      |         Milestone:
             Component:  Compiler    |           Version:  7.10.1
              Keywords:              |  Operating System:  Unknown/Multiple
          Architecture:              |   Type of failure:  None/Unknown
  Unknown/Multiple                   |        Blocked By:
             Test Case:              |   Related Tickets:
              Blocking:              |
Differential Revisions:              |
-------------------------------------+-------------------------------------
 I've been looking at the `Lexeme` module (in `basicTypes`), where -- as
 far as I can tell -- utter chaos reigns. (Full disclosure: I wrote this
 module some time ago, inheriting its code from various places. But I
 clearly did a poor job of it.) Here is a sampling of the chaos:

 * `isLexConSym` claims to recognize type and data constructor infix
 symbols. But it requires symbols to start with a `:` (or be `->`). This is
 out-of-date with respect to the change in type constructor infix symbols
 in 7.6(?), which now do not need to start with a `:`.

 * `isVarSymChar` and `okSymChar` both purport to recognize characters that
 are valid parts of symbolic identifiers. But they have entirely different,
 unrelated implementations. These should be the '''same''' function, I
 believe.

 * The `notFollowedBySymbol` function defined in `parser/Lexer.x` overlaps
 with the functions above. But it has a '''third''' implementation,
 different than either of these other two.

 * The `isLexXXX` functions all just look at first characters, except for
 `isLexVarSym`, which looks at all characters. There is a reason for this
 -- that GHC-generated names start with a `$` but should be printed prefix
 -- but I'm not sure I buy it. Is it sufficient to look at the first two
 characters instead of the first one?

 I'm happy to make the code changes around this, but I need some advice
 from someone who has more knowledge about both Haskell's lexical structure
 and quite possibly Unicode.

 Happily, the function in `Lexeme` are not used much. But it would be
 awfully nice if they did the right thing when they are used.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10583>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list