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: void
== \~[]~\ ; antiform (pack!) "void"
>> list
== [a d f 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: void
== \~[]~\ ; antiform (pack!) "void"
>> text
== "adfc"
There's lots of good in the new architecture. Expect to see historical woes vanish, and more new features...