I see a post for the first time, so it is likely has been blocked. Couple of thoughts in loud:
In Nim expressions have already a proper type, no need wrap then into `let|var` assignments. `for x in [1, 2, 3, 4]: if x mod 2 == 0: x else: x + 1` should be a already valid. I think it makes sense `for` expression to return an `iterator` that can be folded into any container type afterwards: seq, array or custom. It is also probably the easiest from the implementation perspective, you just sprinkle `yield` in the right places.
