Thanks for getting this RFC together, Piers.
A few comments:
* I suggest you remove my alternative C<:must(Foo)> suggestion.
It's too ugly to live, inless you just want to use it as a
scare tactic to encourage Larry to chose the C<interface>
syntax instead ;-)
* The new C<interface> keyword would be unnecessary if *package
specifications* could take attributes:
interface Fetcher;
would then become:
package Fetcher : interface;
* There's also no need to distinguish C<use base> and C<use interface>,
since you've previously distinguished them by keyword. I would
suggest that either C<use base> be used for both types of
inheritance, or else the definition of an interface specification
just be a regular C<package>.
* Interfaces will also need to honour C<use delegation>
(RFC 193), which provides yet another way of *not* actually
specifying a method, yet still having it callable.
* The C<use deferred> pragma seems unnecessary, as it is sufficient
to *declare* the autoloaded method, rather than *define* it.
That is:
use deferred 'rollover';
is really just:
sub rollover;
BTW, this trick already works in Perl 5 (for making C<can>
acknowledge autoloaded methods).
Damian