It occurred to me in this post that MOLD/ONLY appears to work at odds to other /ONLY options:
>> append [] []
== []
>> append/only [] []
== [[]]
>> mold []
== "[]"
>> mold/only []
== ""
As my solution to /ONLY is to use an optimized equivalent of func [value][reduce [value]], this highlights the discrepency:
>> append only [] [] ; same as append/only
== [[]]
>> mold only [] ; not same as mold/only
== "[[]]"
How then should MOLD handle blocks, and what are the implications for LOAD? Let's assume that current MOLD/ONLY is the correct behaviour for BLOCK!:
>> mold [1 2 3]
== "1 2 3"
>> load "1 2 3"
== [1 2 3]
This seems fine until you get to single-length blocks:
>> mold [1]
== "1"
>> load "1"
== 1
Clearly this is now an inconsistency in LOAD. LOAD/ALL would get you there:
>> load/all "1"
== [1]
Should LOAD/ALL then be the default? Probably. Proposition: MOLD/ONLY and LOAD/ALL become MOLD and LOAD. Yay! There is a parity where it matters most: (de)serialization of a block of values.
The wrinkle is: loading singular values is useful. Lost is the MOLD/LOAD parity when handling non-blocks:
>> mold 1
== "1"
>> load "1"
== [1]
Where to go with that? Lost is shorthand validation of snippets of text:
>> type-of load "10-Dec-2020"
== date!
>> type-of load "http://rebol.info"
== url!
I'd argue that this is beyond the scope of LOAD—LOAD is an overloaded () function and the more critical behaviour is to return a block. It would be more fitting to dedicate a separate wrapper for TRANSCODE that is less likely to use the polymorphic demands of loading from external sources and craps out if, leading/trailing whitespace aside, the content doesn't conform to a single value (even if that value is a GROUP!). Spitballing—DETECT, DISCERN, whatever:
>> map-each value ["10-Dec-2020" "http://rebol.info"] [type-of detect value]
== [date! url!]
>> detect "1 2 3"
== ERROR! #!*^!#%@$
Thus MOLD of BLOCK! holds parity with LOAD; MOLD of non-block holds parity with DETECT (or other name).