Почему верхняя граница не возвращается из прозрачной строки для кортежей?

#scala #tuples #inline #scala-3

#scala #Кортежи #встроенный #scala-3

Вопрос:

Предполагается, что прозрачная строка возвращает верхнюю границу, но в случае кортежей это не так.

 object TupleTest {
  
  inline def toList[T <: Tuple](x: T): List[String] =  
    inline erasedValue[T] match
      case _: EmptyTuple => Nil
      case _: (t *: ts) =>
        val arg = x.asInstanceOf[t *: ts]
        arg.head.toString :: toList[ts](arg.tail)
  
  transparent inline def tupleize[T](x: T): NonEmptyTuple =
    inline erasedValue[T] match
      case _: (h *: t) => x.asInstanceOf[h *: t]
      case _: T => x *: EmptyTuple

  inline def toListAny[T](x: T): List[String] =  
    val arg = tupleize(x)
    toList(arg)

  
}
TupleTest.toList(1, 2)
TupleTest.toListAny(5, 6) // Does not compile
 

Ссылка на Scastie: https://scastie.scala-lang.org/xQPP2xNdQwS2vG2dGirlVA

Комментарии:

1. tupleize предполагается, что возвращает a NonEmptyTuple , но вторая ваша ветвь inline match возвращает an EmptyTuple , которая явно не является непустой.