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
# New Ticket Created by Carl Mäsak
# Please include the string: [perl #109880]
# in the subject line of all future correspondence about this issue.
# URL: https://rt.perl.org:443/rt3/Ticket/Display.html?id=109880
masak nom: role Foo[::T] { has T @.a = [T] }; class Bar {}; say