diff --git a/lang/spec.html b/lang/spec.html index 413aa966..f425b444 100644 --- a/lang/spec.html +++ b/lang/spec.html @@ -5593,11 +5593,11 @@

Let clause

Join clause

-
join-clause := join typed-binding-pattern in expression join-on-condition
+
join-clause := [outer] join typed-binding-pattern in expression join-on-condition
 join-on-condition := on expression equals expression
 

-A join clause performs an inner equijoin. +A join clause performs an inner or left outer equijoin.

A join clause is executed as follows: @@ -5634,9 +5634,13 @@

Join clause

  • let fs be the list of frames for key k in m;
  • for each frame f' in fs
      -
    • emit a frame consisting of f augmented with f'.
    • +
    • emit a frame consisting of f augmented with f';
  • +
  • if outer was specified and fs is empty, then emit a +single frame consisting of f augmented with a frame that binds every +variable occurring in typed-binding-pattern to (). +
  • @@ -5653,6 +5657,14 @@

    Join clause

    scope for the expression following in, nor for the expression on the left of equals.

    +

    +When outer is specified, the typed-binding-pattern is treated +specially: the inferable-type-descriptor in the typed-binding-pattern must be +var, and for each variable occurring in the typed-binding-pattern, +if the type that would be inferred usually for the variable would be +T, then the type inferred in this case will be +T?. +