Parallel FOR Example

I noticed that in the reduced case of receiving two voids, this will return what WHILE returns if it never runs its body. That is VOID.

However, that is contentious with the VOID-in-NULL-out policy. I wrote some ponderings on what the right answer should be, and I lean towards saying that loops should obey VOID-in-NULL-out.

If that were to be heeded here, it would need something like:

    ...
    blk1 [~void~ any-list?]
    blk2 [~void~ any-list?]
    body [block!]
][
    all [void? blk1, void? blk2] then [return null] 
    return while [(not empty? maybe blk1) or (not empty? maybe blk2)] [
        ...

(There's probably a cleverer way to write it--there usually is--but that's straightforward enough.)

But I'm a little on the fence on if loops should do VOID-in-VOID-out vs. VOID-in-NULL-out, so I'm just going to start paying closer attention to which seems more useful.

(The answer might depend on the kind of loop. For instance, MAP-EACH being "expected" to produce a value should contrast it with NULL if it couldn't. Whereas FOR-EACH and FOR-PARALLEL and such might be more like EVAL and be expected to tunnel whatever evaluative result it gets.)