The evolution of "invisibility" in Ren-C gave rise to two "ghostly intents": the VOID and HEAVY VOID unstable antiforms.
The default evaluator (and UPARSE) don't vaporize PACK!s on a whim: it will still be the result of expressions whose last result is a HEAVY VOID.
>> 1 + 2 pack []
== \~()~\ ; antiform (pack!) "heavy void"
On the other hand, VOID! antiform vaporizes in some situations:
>> 1 + 2 comment "hi"
== 3
Erasing VOID! is something you want to do if you can. But it's up to constructs to decide if they want to erase HEAVY VOID or not.
DELIMIT does, so you will see that reflected in things like UNSPACED.
Here's a few ways of making a heavy void
>> unspaced ["A" (pack []) "C"]
== "AC"
>> unspaced ["A" (if 1 > 2 ["B"] else [heavy ()]) "C"]
== "AC"
>> unspaced ["A" (if 1 > 2 ["B"] else []) "C"]
== "AC"
COMPOSE vaporizes both VOID and HEAVY VOID slots (and errors on null ones). REDUCE is currently vaporizing both VOID and HEAVY VOID because it seems like the default people want.
But What Should ANY and ALL Do?
We can consider that HEAVY VOID is neither truthy nor falsey, and IF will reject it:
>> if (pack []) [<unreachable>]
** Error: IF doesn't accept HEAVY VOID as its condition argument
But plain VOID is also neither truthy nor falsey. So that's not really the reason.
The reason is that ANY and ALL have a last result that "drops out", and so it's subject to the same kind of misunderstandings that you get in the evaluator if the last item vaporizes but you thought it was the source of your result.
Not Necessary For Things Like FOR-BOTH
I was fairly proud of this formulation:
for-both: func [var blk1 blk2 body] [
return unlift:lite all [
lift:lite for-each var blk1 body
lift:lite for-each var blk2 body
]
]
(I wound up deciding that LIFT would lift everything--including pure null and ghost--so the LITE was probably best included as the alternative formulation.)
At one point I thought that ANY and ALL needed to skip heavy voids, but I now realize that LIFT and UNLIFT:LITE should just put heavy voids in the lifted domain.