This is an idea which has been floating around for a while…which I think we should go ahead and do.
We know that APPEND and APPEND/ONLY can be a sticking point with new users, when they splice blocks together. We also know that even experts get bitten by things like:
>> block: copy [a b c] >> path: 'd/e >> append block path == [a b c d e]
I won’t rehash all the arguments for why APPEND of a BLOCK! splices by default, instead of being the uncommon case you have to ask for (APPEND/SPLICE). Let’s just say that’s how it is, and how it has to be.
But the above behavior does not have to be the rule. We already know BLOCK! is special, an IF statement executes it… but it won’t execute a PATH! or even a GROUP!. Why can’t the splicing be another special magical power of BLOCK!?
>> block: copy [a b c] >> path: 'd/e >> append block path == [a b c d/e] >> append block as block! path == [a b c d/e d e]
With the ability to alias one ANY-ARRAY! type as another, without copying, you can turn a splicing situation into non or vice-versa just by making a value cell which re-types the array. This provides plenty of flexibility. And I think that the idea that only the [blocks] do it goes along with the [o] logo: blocks are special.
Does anyone have objections?