diff --git a/lib/steep/subtyping/check.rb b/lib/steep/subtyping/check.rb index e77d3209..a99a255b 100644 --- a/lib/steep/subtyping/check.rb +++ b/lib/steep/subtyping/check.rb @@ -354,20 +354,19 @@ def check_type0(relation) when relation.super_type.is_a?(AST::Types::Var) || relation.sub_type.is_a?(AST::Types::Var) Failure(relation, Result::Failure::UnknownPairError.new(relation: relation)) - when relation.sub_type.is_a?(AST::Types::Union) + when relation.super_type.is_a?(AST::Types::Intersection) All(relation) do |result| - relation.sub_type.types.each do |sub_type| - rel = Relation.new(sub_type: sub_type, super_type: relation.super_type) - result.add(rel) do + relation.super_type.types.each do |super_type| + result.add(Relation.new(sub_type: relation.sub_type, super_type: super_type)) do |rel| check_type(rel) end end end - when relation.super_type.is_a?(AST::Types::Union) - Any(relation) do |result| - relation.super_type.types.sort_by {|ty| (path = hole_path(ty)) ? -path.size : -Float::INFINITY }.each do |super_type| - rel = Relation.new(sub_type: relation.sub_type, super_type: super_type) + when relation.sub_type.is_a?(AST::Types::Union) + All(relation) do |result| + relation.sub_type.types.each do |sub_type| + rel = Relation.new(sub_type: sub_type, super_type: relation.super_type) result.add(rel) do check_type(rel) end @@ -384,10 +383,11 @@ def check_type0(relation) end end - when relation.super_type.is_a?(AST::Types::Intersection) - All(relation) do |result| - relation.super_type.types.each do |super_type| - result.add(Relation.new(sub_type: relation.sub_type, super_type: super_type)) do |rel| + when relation.super_type.is_a?(AST::Types::Union) + Any(relation) do |result| + relation.super_type.types.sort_by {|ty| (path = hole_path(ty)) ? -path.size : -Float::INFINITY }.each do |super_type| + rel = Relation.new(sub_type: relation.sub_type, super_type: super_type) + result.add(rel) do check_type(rel) end end