Skip to content

Commit 2017b87

Browse files
committed
Type match with a match type when a match type is expected
1 parent dc5a9a4 commit 2017b87

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

compiler/src/dotty/tools/dotc/typer/Typer.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1553,7 +1553,7 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
15531553
case otherTpe => otherTpe.widen
15541554
/** Extractor for match types hidden behind an AppliedType/MatchAlias */
15551555
object MatchTypeInDisguise {
1556-
def unapply(tp: AppliedType)(using Context): Option[MatchType] = tp match {
1556+
def unapply(tp: Type)(using Context): Option[MatchType] = tp match {
15571557
case AppliedType(tycon: TypeRef, args) =>
15581558
tycon.info match {
15591559
case MatchAlias(alias) =>
@@ -1563,6 +1563,7 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
15631563
}
15641564
case _ => None
15651565
}
1566+
case mt: MatchType => Some(mt)
15661567
case _ => None
15671568
}
15681569
}

tests/pos/match-type-inference.scala

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
type IsString[T <: Any] = T match {
2+
case String => true
3+
case _ => false
4+
}
5+
6+
def isString(x: Any): IsString[x.type] = x match
7+
case _: String => true
8+
case _ => false
9+
10+
def isString2(x: Any): x.type match {
11+
case String => true
12+
case _ => false
13+
} = x match
14+
case _: String => true
15+
case _ => false
16+
17+
def isString3[T](x: T): T match {
18+
case String => true
19+
case _ => false
20+
} = x match
21+
case _: String => true
22+
case _ => false

0 commit comments

Comments
 (0)