I didn't phrase it right. I meant that a let/lambda/if always extends to the next relevant (not part of a smaller expression) punctuation symbol; and if that phrase parses as an exp that's fine, otherwise it's a parse error. So I should not really speak in terms of 'ambiguity'.
Perhaps we can simply say that let .. in exp is legal only if the phrase is followed by one of the punctuation symbols. That's nice, because we don't need to talk of "not part of a smaller expression". So (let x = 10 in x `div`) would be rejected because x `div` isn't a exp. Simon | -----Original Message----- | From: Ross Paterson [mailto:[EMAIL PROTECTED]] | Sent: 26 February 2002 16:06 | To: Simon Peyton-Jones | Cc: [EMAIL PROTECTED] | Subject: Re: H98 Report: expression syntax glitch | | | On Tue, Feb 26, 2002 at 07:30:44AM -0800, Simon Peyton-Jones wrote: | > Replace "The ambiguity is resolved by the meta rule that | each of these | > constructs extends as far to the right as possible" by | > | > "The ambiguity is resolved by the meta rule that each | > of these constructs extends to the nearest occurrence of | > the following punctuation symbols that does not form part of | > a nested expression: | > | > ) ] } | ; , .. where of then else | | I didn't think this was going to be pretty, but it doesn't | quite work either. There's no ambiguity in | | (let x = 10 in x `div`) | | The context-free grammar gives exactly one parse for this, | and we want to disallow it. It seems you need to retain the | old meta-rule for the ambiguities but also explicitly exclude | certain forms. | _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell