The problem with `$files` is the `$` When a `for` loop sees something that is itemized / containerized (`$`) it treats it as a singular value.
my @a = 1,2,3; my $a = @a; for @a { .say } # 1 # 2 # 3 for $a { .say } # [1 2 3] for @a.item { .say } # [1 2 3] To get it to not see the `$` you have to do something for $a.list {…} for @$a {…} for $a<> {…} # decontainerize for $a.sefl {…} # ditto On Wed, Feb 13, 2019 at 6:30 AM Mikkel <mikkelst...@gmail.com> wrote: > > Hello. (recurring noob-question here) > > I seem always seem to get myself confused with Arrays/Typed Arrays. Can I ask > of you to explain why the 'for' loop does not work without .flat? It seems so > counter intuitive.... > > > my Array[Str] $files; > (Array[Str]) > > > $files.push("Test"); > [Test] > > > $files.push("Test 2"); > [Test Test 2] > > > for $files -> Str $f {.say} > Type check failed in binding to parameter '$f'; expected Str but got > Array[Str] (Array[Str].new("Test", "Test 2")) > in block <unit> at <unknown file> line 1 > > Best regards > Mikkel Birkedam