
Simon Marlow wrote:
I believe the solution we adopted for GHC 6.8.1 (and I proposed for Haskell') strikes the right balance.
M.where is lexed as an identifier. This doesn't require adding any exceptions or corner cases to either the implementation or the specification of the grammar. It is much easier to implement than the existing Haskell 98 rule (I deleted 30 lines of code from GHC's lexer to implement it). It's easy to understand. It removes an opportunity for obfuscation. It must be the right thing!
Yes, and fortunately (for all tools that output names unqualified, like ghci's browse) an identifier like "M.where" is unusable, because ghc fails with: Qualified name in function definition Otherwise (or nevertheless) I would invest an extra code line in the lexer to rule out such identifiers. C.