I really like the new [] function syntax, but it seems to me that it could easily be extended to allow any number of parameters and even an arbitrary number. Observe: [f _ 1] ::= (fn (_) (f _ 1)) ; this is all that works now, IIANM [f _0 _1 2] ::= (fn (_0 _1) (f _0 _1 2)) simply demand that all identifiers starting with an underscore are arguments to be passed. We need one more special identifier to allow arbitray number of arguments: [f _0 2 _1 ...] ::= (fn (_0 _1 . ...) (apply f _0 2 _1 ...)) |