…e assembly for poison.
We are changing from _why's syntax for closures here. He had (a, b, ...) : statements. where the (a, b, ...) table was optional. We have : (a, b, ...) statements. where, again, the (a, b, ...) table is optional. In this new form, it is easy to communicate that: "A closure starts with ':' and ends with '.' and has an optional table of arguments as the first element after the ':'" However, this does lead to one potential ambiguity (for the user, not the parser). The following has an empty body, rather than a single statement comprised of a table: : (a, b) . To create a closure that is a single table as the first item, the optional table of arguments must be specified: : () (a, b) . While it would be nice to avoid this sort of case completely, it should be fairly rare. The tradeoff is made in the favor of the simplicity of describing (and identifying when reading code) what a closure is. A second reason for this syntax is that attaching a block to a message is much nicer. The syntax _why used could not handle the following elegantly: 5 to 10 : (x) x string print. 5 to (10, 2) : (x) x string print. because there is nothing separating the argument to #to (eg 10 or (10, 2) ) from the argument table for the closure. Using this alternative syntax, the closure start token ':' nicely separates the table of arguments as part of a message and the table of arguments for the closure.