use Scalar::Util 'blessed';
use Carp 'croak';
+use Class::Load 'is_class_loaded';
use Sub::Exporter;
my $metaclass = $args{metaclass} || "Moose::Meta::Role";
my $meta_name = exists $args{meta_name} ? $args{meta_name} : 'meta';
+ Moose->throw_error("The Metaclass $metaclass must be loaded. (Perhaps you forgot to 'use $metaclass'?)")
+ unless is_class_loaded($metaclass);
+
Moose->throw_error("The Metaclass $metaclass must be a subclass of Moose::Meta::Role.")
unless $metaclass->isa('Moose::Meta::Role');
$self->as_float == $other->as_float;
}
+ # ... and also
+
+ package Comparator;
+ use Moose;
+
+ has compare_to => (
+ is => 'ro',
+ does => 'Eq',
+ handles => 'Eq',
+ );
+
+ # ... which allows
+
+ my $currency1 = Currency->new(...);
+ my $currency2 = Currency->new(...);
+ Comparator->new(compare_to => $currency1)->equal($currency2);
+
=head1 DESCRIPTION
The concept of roles is documented in L<Moose::Manual::Roles>. This document