Introduction, comprehensions beyond arrays

Brendan Eich brendan at
Fri May 10 11:36:57 PDT 2013

Jason Orendorff wrote:
> On Thu, May 9, 2013 at 11:42 PM, Mike Stay <metaweta at 
> <mailto:metaweta at>> wrote:
>     In Scala, this is desugared into
>       expr1.flatMap(x =>
>         expr2(x).flatMap(y => ...
>           exprN(x, y, ...).map(z =>
>             result(x, y, ..., z)
>           )
>         )
>       )
> Currently comprehensions use the same protocol as for-of statements, 
> namely iterators. I think we definitely want them to use the same 
> protocol.
> .map() is appealing, but to work with for-of statements, it would have 
> to support break, continue, and early return, either using exceptions 
> (like Scala's Breaks) or something new. Part of the appeal of the 
> iterator protocol is that it doesn't complicate break/continue/return.

Agreed. JS ain't Scala.

Note for Mike Stay, in case it helps a bit (just syntax): we agreed to 
use LTR order, so:

[for (x of expr1) for (y of expr2(x)) result(x, y)]

to shorten your example a bit.

> Separately, for the list: are arrow-functions lexically transparent to 
> super and arguments? I hope so! For this kind of desugaring, if 
> nothing else.

'super' like 'this' is lexical -- the outer function's same-named 
keyword meaning.

'arguments' per is 
an error. Perhaps we should change this to match the keywords. Allen?


More information about the es-discuss mailing list