Block lambda is cool, its syntax isn't

Allen Wirfs-Brock allen at
Thu Jan 12 16:11:25 PST 2012

On Jan 12, 2012, at 3:41 PM, Jon Zeppieri wrote:
> An additional consideration: for a block lambda's completion value to
> be another block lambda, the {( syntax would require parenthesis,
> while the {| syntax would not:

No, since a Statement can not begin with a { character parenthesis would be required in using either syntax.  Also note that they would also be required if completion value of the BlockLambda is provided by an object literal:
       {| a,b | ({x: a,y: b})}   //syntax error if parenthesis around object literal are removed

> ...
> With the grammar François is suggesting, this would be a syntax error
> (I think), since the body of a block lambda is a StatementList_opt.
> The {| syntax, on the other hand, can accommodate block lambdas as
> expression statements, though, given another token of lookahead
> (again, I think).

With two token look-ahead a | BlockLambda could be allowed at the head of a statement, but it still would not enable unparenthesized object literals at the head of a statement.  It seems like a cognitive burden to allow one  but not the other.  A simple "{ at the start of an expression statement must be parenthesized" rules seems easiest to learn and remember.



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the es-discuss mailing list