H98 Report: expression syntax glitch

Ross Paterson ross@soi.city.ac.uk
Mon, 25 Feb 2002 14:48:07 +0000

Consider the following Haskell 98 expressions:

	(let x = 10 in x `div`)
	(let x = 10 in x `div` 3)

To parse the first, a bottom-up parser should reduce the let-expression
before the operator, while to parse the second it should shift.
But it needs 4 tokens of lookahead to decide which to do.  That seems
unreasonable, and is well beyond the LALR(1) parsers used by Hugs and GHC.
Replacing `div` by + needs 2 tokens of lookahead, which is still too much.
I think the first should be made illegal, but can't think of a clean rule.
(There are similar expressions using lambda and if.)