sub import {
shift;
- my $metaclass = shift;
+ my $metaclass = shift || 'Class::MOP::Class';
my %options = @_;
my $package = caller();
});
}
+=pod
+
+NOTES
+
+Okay, the metaclass constraint issue is a bit of a PITA.
+
+Especially in the context of MI, where we end up with an
+explosion of metaclasses.
+
+SOOOO
+
+Instead of auto-composing metaclasses using inheritance
+(which is problematic at best, and totally wrong at worst,
+especially in the light of methods of Class::MOP::Class
+which are overridden by subclasses (try to figure out how
+LazyClass and InsideOutClass could be composed, it is not
+even possible)) we use a trait model.
+
+It will be similar to Class::Trait, except that there is
+no such thing as a trait, a class isa trait and a trait
+isa class, more like Scala really.
+
+This way we get several benefits:
+
+1) Classes can be composed like traits, and it Just Works.
+
+2) Metaclasses can be composed this way too :)
+
+3) When solving the metaclass constraint, we create an
+ anon-metaclass, and compose the parent's metaclasses
+ into it. This allows for conflict checking trait-style
+ which should inform us of any issues right away.
+
+Misc. Details:
+
+Class metaclasses must be composed, but so must any
+associated Attribute and Method metaclasses. However, this
+is not always relevant since I should be able to create a
+class which has lazy attributes, and then create a subclass
+of that class whose attributes are not lazy.
+
+
+=cut
+
1;
__END__
=head1 DESCRIPTION
+This is a pragma to make it easier to use a specific metaclass
+and it's
+
=head1 AUTHOR
Stevan Little E<lt>stevan@iinteractive.comE<gt>