Fix type composition
Fuji, Goro [Sat, 13 Nov 2010 14:38:30 +0000 (23:38 +0900)]
lib/Mouse/Meta/TypeConstraint.pm
lib/Mouse/Util/TypeConstraints.pm

index 15fe6e9..395ea78 100644 (file)
@@ -261,8 +261,9 @@ sub _identity;                 # overload 0+
 sub _unite { # overload infix:<|>
     my($lhs, $rhs) = @_;
     require Mouse::Util::TypeConstraints;
-    return Mouse::Util::TypeConstraints::find_or_parse_type_constraint(
-       " $lhs | $rhs",
+    return Mouse::Util::TypeConstraints::_find_or_create_union_type(
+        $lhs,
+        Mouse::Util::TypeConstraints::find_or_create_isa_type_constraint($rhs),
     );
 }
 
index a5220a3..2e9eaac 100644 (file)
@@ -290,8 +290,9 @@ sub _find_or_create_parameterized_type{
 }
 
 sub _find_or_create_union_type{
-    return if grep{ not defined } @_;
-    my @types = sort map{ $_->{type_constraints} ? @{$_->{type_constraints}} : $_ } @_;
+    return if grep{ not defined } @_; # all things must be defined
+    my @types = sort
+        map{ $_->{type_constraints} ? @{$_->{type_constraints}} : $_ } @_;
 
     my $name = join '|', @types;