On Thu, 29 Jun 2017 03:46:02 -0700, [email protected] wrote:
> Mu provides iterator method, but when you mix in a role that wants it
> implemented, it doesn't find it:
>
> m: role Meow { method iterator {…} }; class Bar does Meow {}
> camelia rakudo-moar 2a8d1e: OUTPUT: «5===SORRY!5=== Error while
> compiling <tmp>â¤Method 'iterator' must be implemented by Bar because
> it is required by roles: Meow.â¤at <tmp>:1â¤Â»
>
> Yet it all works fine if you are also doing `is SomethingUnrelated`:
>
> m: class Foo { method x {} }; role Meow { method iterator {…} }; class
> Bar is Foo does Meow {}
> camelia rakudo-moar 2a8d1e: ( no output )
Another example turned up; fails to notice the method is provided by `handles`:
class HTTP::Header does Associative does Iterable {
subset StrOrArrayOfStr where Str | ( Array & {.all ~~ Str} );
has %!fields of StrOrArrayOfStr
handles <AT-KEY EXISTS-KEY DELETE-KEY push
iterator list kv keys values>;
method Str { #`[not shown, for brevity] }
}
This is from https://github.com/perl6/doc/issues/1438