Returning exclusively TRASH! is a simplifying decision, in and of itself.
It meant dropping a PRINT feature, which was returning NULL if the SPACED product vaporized fully:
old>> print ["" ""]
; <-- PRINT printed this newline
; <-- the console outputs this newline between commands
old>> print [() ()]
== \~null~\ ; antiform
old>> print [() ()] else [print "This was the idea"]
This was the idea
While return: [trash!] is a kind of disturbing thing to see in the spec of a foundational function, return: [<null> trash!] would require even more explanation and hand-waving.
I realized we could do even better, if PRINT accepted VOID... and pushing the behavior elsewhere.
print spaced [() ()] else [
"this is the new idea"
]
Now the ELSE is reacting to the SPACED, not the PRINT. Not only can you run arbitrary code, you can say what to print instead... or you can say to print nothing!
print spaced [() ()] else [
<your arbitrary code here>
none
]
Once the simplifying stroke of moving from [<null> trash!] to [trash!] was made, then PROCEDURE could be used instead of FUNCTION... which gets rid of the return spec, thus sweeping the "TRASH" terminology under the rug a bit.
Note that you can still get PRINT to "return NULL" with veto-ing, but you have to call SPACED yourself:
>> name: null
>> print cond spaced [() ()]
== \~null~\ ; antiform (logic!)
This is a good example of the parts coming together in the name of simplicity, yet still being amazingly expressive and powerful despite that.