@@ -212,14 +212,20 @@ trait SpaceLogic {
212212 if (isSubType(tp2, tp1)) b
213213 else if (canDecompose(tp1)) tryDecompose1(tp1)
214214 else if (isSubType(tp1, tp2)) a // problematic corner case: inheriting a case class
215- else intersectUnrelatedAtomicTypes(tp1, tp2)
215+ else intersectUnrelatedAtomicTypes(tp1, tp2) match
216+ case Typ (tp, _) => Prod (tp, fun, ss)
217+ case sp => sp
216218 case (Prod (tp1, fun, ss), Typ (tp2, _)) =>
217219 if (isSubType(tp1, tp2)) a
218220 else if (canDecompose(tp2)) tryDecompose2(tp2)
219221 else if (isSubType(tp2, tp1)) a // problematic corner case: inheriting a case class
220- else intersectUnrelatedAtomicTypes(tp1, tp2)
222+ else intersectUnrelatedAtomicTypes(tp1, tp2) match
223+ case Typ (tp, _) => Prod (tp, fun, ss)
224+ case sp => sp
221225 case (Prod (tp1, fun1, ss1), Prod (tp2, fun2, ss2)) =>
222- if (! isSameUnapply(fun1, fun2)) intersectUnrelatedAtomicTypes(tp1, tp2)
226+ if (! isSameUnapply(fun1, fun2)) intersectUnrelatedAtomicTypes(tp1, tp2) match
227+ case Typ (tp, _) => Prod (tp, fun1, ss1)
228+ case sp => sp
223229 else if (ss1.zip(ss2).exists(p => simplify(intersect(p._1, p._2)) == Empty )) Empty
224230 else Prod (tp1, fun1, ss1.zip(ss2).map((intersect _).tupled))
225231 }
0 commit comments