+ | apps WHERE sets END (ELocal ((ESeq sets, (setsleft, setsright)), apps),
+ (appsleft, ENDright))
+ | apps WITH END (EWith (apps, (ESkip, (WITHleft, ENDright))),
+ (appsleft, ENDright))
+ | apps WITH exp END (EWith (apps, exp), (appsleft, ENDright))
+ | apps WHERE sets WITH END (ELocal ((ESeq sets, (setsleft, setsright)),
+ (EWith (apps, (ESkip, (WITHleft, ENDright))),
+ (appsleft, ENDright))),
+ (appsleft, ENDright))
+ | apps WHERE sets WITH exp END (ELocal ((ESeq sets, (setsleft, setsright)),
+ (EWith (apps, exp), (appsleft, ENDright))),
+ (appsleft, ENDright))
+
+ | BSLASH SYMBOL COLON LPAREN typ RPAREN ARROW exp (ELam (SYMBOL, SOME typ, exp),
+ (BSLASHleft, expright))
+ | BSLASH SYMBOL ARROW exp (ELam (SYMBOL, NONE, exp), (BSLASHleft, expright))
+ | BSLASHBSLASH SYMBOL COLON ctxt ARROW exp (EALam (SYMBOL, ctxt, exp),
+ (BSLASHBSLASHleft, expright))