diff --git a/compiler/src/dotty/tools/dotc/core/TypeComparer.scala b/compiler/src/dotty/tools/dotc/core/TypeComparer.scala index 465978d329e6..2e7db9981531 100644 --- a/compiler/src/dotty/tools/dotc/core/TypeComparer.scala +++ b/compiler/src/dotty/tools/dotc/core/TypeComparer.scala @@ -3151,7 +3151,7 @@ class TrackingTypeComparer(initctx: Context) extends TypeComparer(initctx) { case redux => MatchResult.Reduced(redux.simplified) case _ => - MatchResult.Reduced(body) + MatchResult.Reduced(body.simplified) if caseLambda.exists && matches(canWidenAbstract = false) then redux(canApprox = true) diff --git a/tests/pos/i16596.scala b/tests/pos/i16596.scala new file mode 100644 index 000000000000..36e20d1cf2de --- /dev/null +++ b/tests/pos/i16596.scala @@ -0,0 +1,7 @@ +import scala.compiletime.ops.int + +type Count[N,T] <: Tuple = (N,T) match + case (0,T) => EmptyTuple + case (N,T) => T *: Count[int.-[N, 1], T] + +val a: Count[3, Int] = (1, 2, 3)