Skip to content

Tuple.Zip not able to handle more than 22 elements  #15043

Open
@chungonn

Description

@chungonn

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions