> In the table of precedence in the original Report (now deleted in
> the revised Report), it makes it clear that a rightward-extending
> let, if, or lambda has a lower precedence than an infix operator,
> so for instance the parse
> 
>       h = (let op x y = y in (3 `op`))
> 
> is correct and
> 
>       h = ((let op x y = y in 3) `op`)
> 
> is not.

Actually the table claims that 'let' has a higher precedence than infix operators, so 
your second example above would be the correct parse according to the table.  This may 
be one of the reasons it was removed, I can't remember now.

Also, the table wasn't supposed to contain any extra information that isn't already in 
the grammar (Section 3: "As an aid to undertanding the grammar, Table 1 shows the 
relative precedences..."), so if the table is required to understand a particular 
parse, it would indicate a deficiency or ambiguity in the grammar.

On the other hand, one way to fix this problem *is* to specify the relative precedence 
of 'let' & co. as compared to infix operators (namely that 'let' should have a lower 
precedence).  That would be a reasonable fix for the H98 report, IMO.

Cheers,
        Simon
_______________________________________________
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to