On IRC I said this was a bug, because the behaviour seemed so surprising, but now that I made a fix for it (diff attached), I find breakage in t/spec/S03-metaops/zip.t and t/spec/S32-container/roundrobin.t that test for what I see is a contradictory (to this ticket) behaviour for RT#126522.
Basically roundrobin, zip, and a few others aren't meant to treat itemized lists as lists and instead treat them as a single item. This is why the behaviour in this ticket is observed: array's elements are itemized and so get treated differently. So.... this is just a pitfall of sorts and isn't a bug?
diff --git a/src/core/List.pm b/src/core/List.pm index 4edd254..172009b 100644 --- a/src/core/List.pm +++ b/src/core/List.pm @@ -1593,14 +1593,14 @@ multi sub infix:<Z>(+lol) { return Seq.new(Rakudo::Internals.EmptyIterator) if $arity == 0; eager my @l = (^$arity).map: -> $i { my \elem = lol[$i]; - if nqp::iscont(elem) { - $laze = False; - Rakudo::Internals.WhateverIterator((elem,)) - } - else { + if nqp::istype(elem, Iterable) { $laze = False unless elem.is-lazy; Rakudo::Internals.WhateverIterator(elem) } + else { + $laze = False; + Rakudo::Internals.WhateverIterator((elem,)) + } } gather { @@ -1622,13 +1622,13 @@ my &zip := &infix:<Z>; sub roundrobin(**@lol is raw) { my $laze = False; my @iters = do for @lol -> \elem { - if nqp::iscont(elem) { - (elem,).iterator - } - else { + if nqp::istype(elem, Iterable) { $laze = True if elem.is-lazy; elem.iterator } + else { + (elem,).iterator + } } gather { while @iters {