"Não é possível atribuir a um valor imutável" ao tentar atribuir a uma sequência + função

Começando como exemplo na página Iterable doc

role DNA does Iterable {
  method iterator(){ self.comb.iterator }
};

my @a does DNA = 'GAATCC';
.say for @a; # OUTPUT: «G␤A␤A␤T␤C␤C␤» 

Achei estranho declarar usando o@, então eu mudei para onatural maneira de declarar strings,$:

my $a does DNA = 'GAATCC';

Mas isso falha com um desconcertante "Não é possível atribuir a um valor imutável". Não há necessidade de atribuir no local, para que possamos fazer:

my $a = 'GAATCC';
$a does DNA;
.say for $a;

O que deixa a mistura para mais tarde. Mas isso apenas imprime a corda, sem prestar atenção aoIterable mixin. Vamos chamá-lo explicitamente:

.say for $a.iterator;

faz quase a mesma coisa que antes, só que imprime o valor de$a.iterator, sem realmente chamar a função:

<anon|69>.new

Isso parecea mesma coisa que está acontecendo nesta outra questão. A questão de base é que eu não entendo qual papel o Iterable realmente desempenha e qualfor realmente faz e quando está chamandoiterator em algum objeto. Qualquer ideia?

questionAnswers(2)

yourAnswerToTheQuestion