scala3 icon indicating copy to clipboard operation
scala3 copied to clipboard

TupledFunction discards dependent types

Open TheDrawingCoder-Gamer opened this issue 1 year ago • 0 comments

Compiler version

3.5.1

Minimized code

https://scastie.scala-lang.org/qu0ee9VpT3SQ6YbiBzf0DA

import scala.annotation.experimental

type X = (x: Seq[Nothing], y: Seq[Nothing]) => x.type

@experimental @main def main(): Unit = {
  val tf = summon[util.TupledFunction[X, ((Seq[Nothing], Seq[Nothing])) => Seq[Nothing]]]
  val res1 = tf.untupled((x, y) => y)
  val res2: Vector[Nothing] = Vector()
  val res3: res2.type = res1(res2, List())
}

Output

Exception in thread "main" java.lang.ClassCastException: class scala.collection.immutable.Nil$ cannot be cast to class scala.collection.immutable.Vector (scala.collection.immutable.Nil$ and scala.collection.immutable.Vector are in unnamed module of loader 'app')
	at main$package$.main(main.scala:10)
	at main.main(main.scala:6)

Expectation

Compiler should deny the summon here and require a summon of summon[TupledFunction[X, (t: (Seq[Nothing], Seq[Nothing])) => t._1.type]. It should not allow discarding of dependent types.

TheDrawingCoder-Gamer avatar Oct 18 '24 21:10 TheDrawingCoder-Gamer