
Malcolm Wallace wrote:
"Brian Hulley"
wrote: Thanks for pointing this out. Although there is still a problem with the fact that var, qvar, qcon etc is in the context free syntax instead of the lexical syntax so you could write:
2 ` plus ` 4 ( Prelude.+ {- a comment -} ) 5 6
You appear to be right. However, I don't think I have ever seen a piece of code that actually used the first form. People seem to naturally place the backticks right next to the variable name. Should we consider the fact that whitespace and comments are permitted between backticks to be a bug in the Report? It certainly feels like it should be a lexical issue.
I tend in the other direction: I'd rather see as much as possible pushed into the context-free syntax. The only reason that qualified identifiers are in the lexical syntax currently is because of the clash with the '.' operator. I'm not sure I can concisely explain why I think it is better to use the context-free syntax than the lexical syntax, but I'll try. I believe the lexical syntax should adhere, as far as possible, to the following rule: juxtaposition of lexemes of different classes should not affect the lexical interpretation. in other words, whitespace between different lexemes is irrelevant. I know this rule is violated in many places in the Haskell lexical syntax, but at least for me it serves as a guideline for what is tasteful. For example, it rules out `x` as a lexeme, because ` ought to be a reserved symbol, and then `x` would be a justaposition of 3 lexemes. This also explains to me why I think many of GHC's syntactic extensions are ugly (42#, (#..#), $x, [d|..|], etc.). However, it's really hard to extend the lexical syntax and stick to this rule, especially if you want to add brackets. So you should consider this a rant, nothing more. Cheers, Simon