1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
sealed trait KList[+M[_]]
case class KCons[M[_], +T <: KList[M]](
tail: T
) extends KList[M]
case class KNil[M[_]]() extends KList[M]
object Test {
val klist: KCons[Option, KCons[Option, KCons[Option, KNil[Nothing]]]] = ???
// crashes with
// "Exception in thread "main" scala.reflect.internal.Types$TypeError: value _1 is not a member
// of KCons[Option,KCons[Option,KNil[Nothing]]]"
klist match {
case KCons(KCons(KCons(_))) =>
}
// fails with a similar message as an error, rather than a crash.
klist match {
case KCons(KCons(_)) =>
}
// succeeds
klist match {
case KCons(_) =>
}
}
|