-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Closed
Labels
Description
Compiler version
3.0.0-RC3
Minimized code
sealed abstract class CtorType[P]
object CtorType {
final class Props[P] extends CtorType[P] {
def whyHelloThere(props: P): Unit = ()
}
}
trait Comp[P, CT[p] <: CtorType[p]] {
val ctor: CT[P]
}
object Comp {
implicit def autoCtor[P, CT[p] <: CtorType[p]](c: Comp[P, CT]): CT[P] = c.ctor
}
object Test {
val comp: Comp[Int, CtorType.Props] = ???
comp.whyHelloThere(3) // error: should work
Comp.autoCtor(comp).whyHelloThere(3) // works
}Output
[error] 20 | comp.whyHelloThere(3) // error: should work
[error] | ^^^^^^^^^^^^^^^^^^
[error] | value whyHelloThere is not a member of Comp[Int, CtorType.Props]
[error] one error found
Expectation
It works in Scala 2.x, it should work here too.
Workaround
Duplicate the autoCtor for each subclass of CtorType, remove the CT type param, and hardcode the CT value.
// implicit def autoCtor[P, CT[p] <: CtorType[p]](c: Comp[P, CT]): CT[P] = c.ctor
implicit def autoCtorP[P](c: Comp[P, CtorType.Props]): CtorType.Props[P] = c.ctor