As a status update: This behaves differently now. $ perl6-m -e 'role Foo[::T] { has T @.a = [T] }; class Bar {}; say Foo[Bar].new.a[0]' Type check failed in assignment to '@!a'; expected 'Bar' but got 'Array' in method REIFY at src/gen/m-CORE.setting:9935 in method reify at src/gen/m-CORE.setting:8543 in method gimme at src/gen/m-CORE.setting:9024 in method sink at src/gen/m-CORE.setting:9513 in method BUILDALL at src/gen/m-CORE.setting:1043 in method bless at src/gen/m-CORE.setting:961 in method new at src/gen/m-CORE.setting:947 in any at src/gen/m-Metamodel.nqp:1510 in block <unit> at -e:1
$ perl6-m -e 'my $r = role Foo[::T] { has T @.a }; $r.HOW.attributes($r).perl.say' (Attribute.new(),) $ perl6-m -e 'my $r = role Foo[::T] { has T @.a }; $r.HOW.attributes($r, :local).[0].type.HOW.archetypes.generic.say' 1