I'm tidying up SET and GET to run on a common infrastructure based on PICK and POKE (generalized via isotopes and "dual representation"). It's quite nice!
As I go, I'm improving things left and right. The POKE handler is now built on the same code as CHANGE, with a :PART of 1. That means you can do things like this:
>> list: [a b c]
== [a b c]
>> list.2: spread [d e f]
== \~[d e f]~\ ; antiform (splice!)
>> list
== [a d e f c]
>> list.3: ()
== \~,~\ ; antiform (ghost!) "void"
>> list
== [a d f c]
() is just a particularly handy way of making voids; note NONE and VOID do the same thing here:
>> list.2: opt all [1 = 1 2 = 2 'x]
== x
>> list
== [a x f c]
>> list.3: pack []
== \~()~\ ; antiform (pack!) "heavy void"
>> list
== [a x c]
Since strings can't store lists in them, you don't have to "spread" strings to splice them...
>> text: "abc"
== "abc"
>> text.2: "def"
== "def"
>> text
== "adefc"
>> text.3: ()
== \~,~\ ; antiform (ghost!) "void"
>> text
== "adfc"
There's lots of good in the new architecture. Expect to see historical woes vanish, and more new features...