More on roles
- Roles are not inheritance
- more like exporter
- Conflicts are not possible
- if two roles have the same method, Moose will die during application
- Roles depending on unapplied-roles is OK
package Role::A;
use Moose::Role;
requires 'b';
sub a { ... }
package Role::B;
use Moose::Role;
requires 'a';
sub b { ... }
package Class;
use Moose;
with qw/Role::A Role::B/; # works fine
Class->can('a'), Class->can('b')