Closed
Description
Compiler version
3.5.0-RC1-bin-SNAPSHOT (b10d64e)
Minimized code
import language.experimental.namedTuples
import NamedTuple.{NamedTuple, AnyNamedTuple}
// Repros for bugs or questions
class ClassToMap[A]()
abstract class ClassToFind[Rows <: AnyNamedTuple]:
def mapped: NamedTuple.Map[Rows, ClassToMap]
given TDB: ClassToFind[(t1: Int, t2: String)] with
override def mapped = (
t1 = ClassToMap[Int](),
t2 = ClassToMap[String]()
)
type TypeAlias = (t1: Int, t2: String)
class Repro1_Pass(using val testDB: ClassToFind[TypeAlias]) {
def query() =
testDB.mapped.t1
}
class Repro1_Fail(using val testDB: ClassToFind[(t1: Int, t2: String)]) {
def query() =
testDB.mapped.t1 // fails to compile
}
Output
[error] 25 | testDB.mapped.t1 // fails to compile
[error] | ^^^^^^^^^^^^^
[error] |Found: (x$proxy3 :
[error] | (Repro1_Fail.this.testDB.mapped :
[error] | => NamedTuple.Map[(t1 : Int, t2 : String), repro.ClassToMap])
[error] | &
[error] | $proxy3.NamedTuple[
[error] | NamedTupleDecomposition.Names[
[error] | $proxy3.NamedTuple[(("t1" : String), ("t2" : String)), (Int, String)]],
[error] | Tuple.Map²[
[error] | NamedTupleDecomposition.DropNames[
[error] | $proxy3.NamedTuple[(("t1" : String), ("t2" : String)), (Int, String)]],
[error] | repro.ClassToMap]
[error] | ]
[error] |)
[error] |Required: (repro.ClassToMap[Int], repro.ClassToMap[String])
Expectation
It's unexpected that using a type alias enables the given instance to be found, but using the named tuple type directly does not.