From what I can tell, practically anything that performs looping functionality (mainly ForAll) wants to return a table. This means that the actions that are performed inside of the loop need to be returning values that it can then build its table with.
My current situation, and one that I believe is probably pretty common, requires me to loop through a collection and perform actions for each iteration without returning any values. Unfortunately, the obvious choice to use ForAll doesn't work since the first action I need to do is set a temporary variable (using either Set or UpdateContext) which it doesn't accept.
What I propose is that some proper/basic looping functionality is added that doesn't require any return values and has no bias on the type of actions performed inside. We need some options that don't require a hacky combination of 3+ functions that simply allow us to iterate over data. Loops such as For, ForEach(x in x_collect), Do-While, etc.