Open
Description
Compiler version
3.1.1
Minimized code
import scala.deriving.Mirror
case class Size3(a1:Int, a2:Int, a3:Int)
case class Size22(a1:Int, a2:Int, a3:Int, a4:Int, a5:Int, a6:Int, a7:Int, a8:Int, a9:Int, a10:Int, a11:Int, a12:Int, a13:Int, a14:Int, a15:Int, a16:Int, a17:Int, a18:Int, a19:Int, a20:Int, a21:Int, a22:Int)
case class Size23(a1:Int, a2:Int, a3:Int, a4:Int, a5:Int, a6:Int, a7:Int, a8:Int, a9:Int, a10:Int, a11:Int, a12:Int, a13:Int, a14:Int, a15:Int, a16:Int, a17:Int, a18:Int, a19:Int, a20:Int, a21:Int, a22:Int, a23:Int)
type FieldValuePair[X <:Tuple] <: Tuple = X match {
case EmptyTuple => X
case t *: ts => t *: FieldValuePair[ts]
}
inline def baz[A](using m: Mirror.ProductOf[A])(a: Tuple.Zip[m.MirroredElemLabels, FieldValuePair[m.MirroredElemTypes]]) = a
@main def main =
val s3 = baz[Size3]("a1" -> 1, "a2" -> 2, "a3" ->3 )
val s22 = baz[Size22]("a1" -> 1, "a2" -> 2, "a3" -> 3, "a4" -> 4, "a5" -> 5, "a6" -> 6, "a7" -> 7,
"a8" -> 8, "a9" -> 9, "a10" -> 10, "a11" -> 11, "a12" -> 12, "a13" -> 13, "a14" -> 14, "a15" -> 15,
"a16" -> 16, "a17" -> 17, "a18" -> 18, "a19" -> 19, "a20" -> 20, "a21" -> 21, "a22" -> 22)
val s23 = baz[Size23]("a1" -> 1, "a2" -> 2, "a3" -> 3, "a4" -> 4, "a5" -> 5, "a6" -> 6, "a7" -> 7,
"a8" -> 8, "a9" -> 9, "a10" -> 10, "a11" -> 11, "a12" -> 12, "a13" -> 13, "a14" -> 14, "a15" -> 15,
"a16" -> 16, "a17" -> 17, "a18" -> 18, "a19" -> 19, "a20" -> 20, "a21" -> 21, "a22" -> 22, "a23" -> 23)
s3 and s22 compiles successfully, but compiler emits error for s23
Found: ((String, Int), (String, Int), (String, Int), (String, Int), (String, Int), (
String
, Int), (String, Int), (String, Int), (String, Int), (String, Int), (String, Int
)
, (String, Int), (String, Int), (String, Int), (String, Int), (String, Int), (
String
, Int), (String, Int), (String, Int), (String, Int), (String, Int), (String, Int
)
, (String, Int))
Required: Tuple.Zip[(("a1" : String), ("a2" : String), ("a3" : String), ("a4" : String),
("a5" : String)
, ("a6" : String), ("a7" : String), ("a8" : String), ("a9" : String),
("a10" : String)
, ("a11" : String), ("a12" : String), ("a13" : String), ("a14" : String),
("a15" : String)
, ("a16" : String), ("a17" : String), ("a18" : String), ("a19" : String),
("a20" : String)
, ("a21" : String), ("a22" : String), ("a23" : String)),
testA.FieldConstructor[(Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int
,
Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int)]
]
val s23 = baz[Size23]("a1" ->1, "a2" -> 2, "a3" -> 3, "a4" -> 4, "a5" -> 5, "a6" -> 6, "a7" -> 7,
Here is the same code compile using scastie - https://scastie.scala-lang.org/sqRT9EHDT0uyV2QBtdeFQw