Syntax comment: in your control structures you use a keyword ("do", "then") to start a block as well as wrapping the block in parentheses. This feels superfluous. I suggest sticking with either keywords or parens to delineate blocks, not both.
for x in arr (something ())
\ /-- function call
and for x in arr (something ())
\ /-- loop body
This is consequence of combining "blocks" and "precedence" into the same construct ().A more fitting example would be to support:
for x in arr do set z += x;
for x in arr do something x;
IIRC these both currently require an explicit block in my parser.