coerce
find_type_constraint
+ register_type_constraint
)],
);
if($TYPE{$name}){
my $that = $TYPE{$name}->{package_defined_in} || __PACKAGE__;
- ($this eq $that) or Carp::croak(
- "The type constraint '$name' has already been created in $that and cannot be created again in $this"
- );
+ if($this ne $that) {
+ my $note = '';
+ if($that eq __PACKAGE__) {
+ $note = sprintf " ('%s' is %s type constraint)",
+ $name,
+ scalar(grep { $name eq $_ } list_all_builtin_type_constraints())
+ ? 'a builtin'
+ : 'an implicitly created';
+ }
+ Carp::croak("The type constraint '$name' has already been created in $that"
+ . " and cannot be created again in $this" . $note);
+ }
}
}
else{
return $TYPE{$spec};
}
+sub register_type_constraint {
+ my($constraint) = @_;
+ Carp::croak("No type supplied / type is not a valid type constraint")
+ unless Mouse::Util::is_a_type_constraint($constraint);
+ my $name = $constraint->name;
+ Carp::croak("can't register an unnamed type constraint")
+ unless defined $name;
+ return $TYPE{$name} = $constraint;
+}
+
sub find_or_parse_type_constraint {
my($spec) = @_;
return $spec if Mouse::Util::is_a_type_constraint($spec);
=head1 VERSION
-This document describes Mouse version 0.52
+This document describes Mouse version 0.65
=head2 SYNOPSIS