Open
Description
Compiler version
3.4.1, 3.5.0-RC1-bin-20240429-e2c456f-NIGHTLY
Minimized code
//> using scala 3.4.1
import scala.deriving.Mirror
enum YesNo {
case Yes, No
}
enum NoYes {
case No, Yes
}
object Repro {
def derived[A](using A: Mirror.SumOf[A] { type MirroredElemLabels = ("Yes", "No") }) = ???
def derivedWithEvidence[A](using A: Mirror.SumOf[A], ev: A.MirroredElemLabels <:< ("Yes", "No")) = ???
derived[YesNo] // compiles, as expected
derived[NoYes] // compiles, yet NoYes.MirroredElemLabels is ("No", "Yes")
derivedWithEvidence[YesNo] // compiles, as expected
// derivedWithEvidence[NoYes] // compilation fails, as expected
}
Expectation
I'd expect derived[NoYes]
(just like derivedWithEvidence[NoYes]
) to fail the compilation since its MirroredElemLabels
is ("No", "Yes)
but the method's A
argument refined to only allow ("Yes", "No")