to me , this discussion approaches the conclusion that ^[] and v[] are *just* another operators with their own behavior that accept as ( optional ) argument a Code reference .
to follow the beautifull philosophy of perl6 -- "A is just B" we can say ( following Larry Wall ) ... > A Perl5 magic is just a property. > A Perl5 attribute is just a property. > A block is just a closure. > A control structure is just a subroutine that can call closures. ... (maybe...) A "for" loop is *almost* a subroutine that can call closures . A vector operation is just a ( cryptographic ) "for" loop with one or two input streams and <op> name inside brackets as a closure. so it is just a function : sub infix:^[] ( Code &op : Array @a , Array @b ) is parsed /^[ <op> | \[<op>\] ]/ { my @inds = union( @a.keys, @b.keys); return for @inds { &op ( @a[$_] , @b[$_] ) ; } } sub infix:v[] ( Code &op : Array @a , Array @b ) is parsed /^[ <op> | \[<op>\] ]/ { my @inds = intersection( @a.keys, @b.keys); return for @inds { &op ( @a[$_] , @b[$_] ) ; } } or maybe sub infix:^[] ( Code &op : Array @a , Array @b ) is parsed /^[ <op> | \[<op>\] ]/ { return for @a ; @b -> ($x is rw ; $y is rw ) { &op ( $x , $y ) ; } } sub postfix:^[] ( Code &op : Array @a ) is parsed /^[ <op> | \[<op>\] ]/ { for @a -> $x is rw &op( $x ) } .... and analogous things for v[] . and this can be prefix, infix, postfix ; and each argument can be $a, @a, %a ; so it is a multimethod. in that case the vectorization is *compleatly* orthogonal to the details of op and we even can have something like @a ^[{ $^a > $^b ?? 1 :: ($^a,$^b) := ($^b,$^a) }] @b arcadi