use namespace::clean -except => [qw( meta )];
use 5.008;
-our $VERSION = '0.17';
+our $VERSION = '0.20';
my $UndefMsg = q{Action for type '%s' not yet defined in library '%s'};
=head1 SYNOPSIS
PositiveInt NegativeInt
ArrayRefOfPositiveInt ArrayRefOfAtLeastThreeNegativeInts
LotsOfInnerConstraints StrOrArrayRef
+ MyDateTime
)];
# import builtin types
subtype StrOrArrayRef,
as Str|ArrayRef;
+ # class types
+
class_type 'DateTime';
- coerce 'DateTime',
+ # or better
+
+ class_type MyDateTime, { class => 'DateTime' };
+
+ coerce MyDateTime,
from HashRef,
via { DateTime->new(%$_) };
sub create_arged_type_constraint {
my ($class, $name, @args) = @_;
my $type_constraint = Moose::Util::TypeConstraints::find_or_create_type_constraint("$name");
- return $type_constraint->parameterize(@args);
+ my $parameterized = $type_constraint->parameterize(@args);
+ # It's obnoxious to have to parameterize before looking for the TC, but the
+ # alternative is to hard-code the assumption that the name is
+ # "$name[$args[0]]", which would be worse.
+ # This breaks MXMS, unfortunately, which relies on things like Tuple[...]
+ # creating new type objects each time.
+ # if (my $existing =
+ # Moose::Util::TypeConstraints::find_type_constraint($parameterized->name)) {
+ # return $existing;
+ # }
+ # Moose::Util::TypeConstraints::register_type_constraint($parameterized);
+ return $parameterized;
}
=head2 create_base_type_constraint ($name)
rafl: Florian Ragwitz <rafl@debian.org>
+hdp: Hans Dieter Pearcey <hdp@cpan.org>
+
=head1 COPYRIGHT & LICENSE
-Copyright (c) 2007-2009 Robert Sedlacek
+Copyright (c) 2007-2009 Robert Sedlacek <rs@474.at>
This program is free software; you can redistribute it and/or modify
it under the same terms as perl itself.