Speaking With Tics: Should Quoted Arguments Always Be Apostrophe'd?

It has worked out that the @ symbol makes the most sense for reuse existing binding... simply because we're not relying on something completely invisible.

for-each 'x ...    ; the FOR-EACH receives a WORD!, probably unbound
for-each $x ...    ; the FOR-EACH receives a WORD!, probably bound
for-each @x ...    ; the FOR-EACH receives a THE-WORD!, probably bound

It feels more in control to be going on the basis of a sigil that is carried with the word...especially because it goes along with the distinction of for-each [a @b] ... where both have bindings available, it's just only one that's being heeded.

So this will be pushed out systemically to LETs and multi-return blocks. With multi-return, that means having to switch to FENCE! for "circling" a slot to be the primary output value. (Hopefully not too much longer until FENCE! is in...)

Now that we have SIGIL! as a datatype, decomposing things that way is a generalized option. But I don't want to give up too easily here... so let's look at another avenue of attack...


One thing about multi-return is that it's going to be recursive:

[[a b] [c d]]: pack [pack [1 2] pack [3 4]]

Hence these are synonyms:

[a b]: ...
[a [b]]: ...

I think that can be leveraged here, if ^META applied to a block means "apply this to everything in the block".

^[a b]: ...
=>
[^a ^b]: ...

So you could write [a ^[@b]]: and that would mean reuse the b variable, but also make it ^META...and it doesn't feel that contrived to me.

The reverse could be possible as well ([a @[^b]]:). But that isn't as appealing to me for some possibly arbitrary reason. Though if I'm looking for an inkling of a reason for why it's inferior, it couldn't apply on the outermost layer, because the sigil indicates "as is", even for a set-block:

>> @[a b]:
== @[a b]:

So I think the simpler rule here is only to allow the meta sigil to distribute over blocks. It seems to cover the bases.