Found one glitch... there was an idiom of using the inertness in some places with blocks.
>> spaced ["Reduced" 1 + 2 "Content"]
== "Reduced 3 Content"
>> spaced @["Unreduced" 1 + 2 "Content"]
== "Unreduced 1 + 2 Content"
>> meta pack [1 + 2 10 + 20]
== ~['3 '30]~
>> meta pack @[1 + 2 10 + 20]
== ~['1 '+ '2 '10 '+ '20]~
This won't work anymore, as the evaluator isn't inert here.
HOWEVER... there is a construct that can pick up the slack. The META-BLOCK!
>> ^[1 + 2 10 + 20]
== '[1 + 2 10 + 20]
It produces a block which is quoted, and which captured a binding. So it is suitable for this purpose. It does raise questions like "what to do if the block is double or triple quoted" etc, but I think raising an error is fine for the moment.
Coincidentally, I was thinking about my desire to have a proper FOR dialect.
>> for x [1 to 3] [print x]
1
2
3
And then, the concept of "going meta" struck me as interesting:
>> for x meta [1 to 3] [print x]
1
to
3
Which would mean that FOR when given a quoted block would enumerate its contents vs. run the dialect. Then you could also write that as:
>> for x ^[1 to 3] [print x]
1
to
3
If you didn't want a binding you need a quoted block and a generator applied to the resulting unbound block:
>> for x each '[1 to 3] [print x]
1
to
3
It's interesting to see the parts coming together with some things not being as useless as first thought.