H98 Report: expression syntax glitch

Ian Lynagh igloo@earth.li
Wed, 27 Feb 2002 21:10:23 +0000

On Mon, Feb 25, 2002 at 04:27:56PM -0000, Simon Marlow wrote:
> This is a known problem with the Haskell grammar.  Another example in
> a similar vein is
> 	let x = 3 in x == 4 == True
> which should parse as
> 	(let x = 3 in x == 4) == True
> according to the "extends as far to the right as possible" rule,
> because '==' is nonfix.  In order to do this, the parser must have
> access to the fixity information for '==', which is unreasonable
> (fixity declarations can even be local to a binding group).

I'm not sure I agree with you here. By this point we have lexed and
applied the layout rule so all the braces and semi-colons are in place.
Extracting the fixity information is fairly easy Noticing when operators
are redefined (thus dropping fixity information) is slightly trickier
but still doable, and then all you have to do is annotate your tree
appropriately. Further, if you first construct a tree of blocks then
this can all be done in linear time I believe.

I don't see that this is a forced change; it seems to be purely to make
implementors lives easier (maybe I am just bitter from spending a while
thinking about and implementing this myself!) and makes some previously
legal scripts illegal.