Stefan O'Rear wrote:
On Fri, Aug 17, 2007 at 12:53:11PM +0200, Christian Maeder wrote:
Hi Isaac,
just to give you a reply at all, see below. I reply
glasgow-haskell-users@haskell.org since I'm not subscribed to
haskell-prime. And I don't want to subscribe, because I'm more
interested that Haskell becomes more stable (and standard). So here is
my opinion:
1. The lexer should recognize keywords.
2. I would not mind if Haskel98 rejected all keywords that are also
rejected by extensions, so that the lexer is extension independent.
(Starting with Haskell98, removing conflicting identifiers as soon as I
switch on valuable extensions does not make sense.)
3. I'm against qualified identifiers, with the unqualified part being a
keyword like "Foo.where". (The choice of qualification should be left to
the user, usually one is not forced to used qualified names.)
4. However, "Foo.where" should always be rejected and not changed to
"Foo.wher e"! (Longest matching, aka "maximal munch", must not consider
keywords!)
(see end of: http://www.haskell.org/onlinelibrary/lexemes.html#sect2.4)
I would not mind if a name "F. " is plainly rejected. It only makes
sense, when a data constructor is the first argument of the composition
operator "(.)"
Maybe "." and "$" as operators should require white spaces on both
sides, since "$(" also indicates template haskell.
What's wrong with the status quo? Our current lexical rules *seem*
complicated to newbies, but just like everything else in Haskell it
carries a deep simplicity; having only one rule (maximal-munch) gives a
certain elegance that the proposals all lack.
I'd hate to see Haskell become complex all the way down just to fix a
few corner cases; I see this pattern of simplicity degerating through
well-intentioned attempts to fix things all over the language...
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!
Cheers,
Simon
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users