Where things have been headed is to offer a MAP operation combined with generators.
>> gen: each [1 2]
== ~#[frame! "gen" []]~ ; anti
>> gen
== 1
>> gen
== 2
>> gen
== ~null~ ; anti
>> map x each [1 2] [x * 10]
== [10 20]
>> for x each [1 2] [print ["x is" x], x * 10]
x is 1
x is 2
== 20
When you combine this with GENERATOR and YIELDER (work in progress) it gives even more options.
You'd get something analogous to COLLECT and KEEP with:
>> map y generator [
for x each [1 2] [yield x * 10] yield [a b] yield spread [d e]
] [y]
== [10 20 [a b] d e]
But it's not the same approach (e.g. there's no YIELD/LINE or YIELD/DUP). The pattern of implementing COLLECT+KEEP is applicable to different kinds of problems.