-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Description
Observation
trait Trait :
type Y
var list: List[Y] = Nil
class Class[Y] extends Trait :
def add(elm: Y): Unit = list = elm :: list
object Object extends Class[Int] :
add(42)
println(Object.list)compiles under 3.2.2 but not under 3.2.1. The latter gives the error:
Found: (elm : Y)
Required: Class.this.Y²
where: Y is a type in class Class
Y² is a type in trait Trait
So it looks like under 3.2.2 it is possible to define the type member from Trait with the type parameter from Class. That would be nice if this would fail to compile:
trait Trait :
type Y <: String
var list: List[Y] = Nil
class Class[Y] extends Trait :
def add(elm: Y): Unit = list = elm :: list
object Object extends Class[Int] :
add(42)
println(Object.list)where I changed type Y to type Y <: String but it does not. This still produces List(42).
Expectation
Compiler error on the latter code OR the same behaviour as in Scala 3.2.1 of Scala 3.2.2 on the former code .
Discussion
I observed this behaviour on the Jan, 13 and we discussed it om the scala users forum under the title:
Int <: String in Scala 3.2.2?. I had to wait though until Scastie with 3.2.2 was released for easy reference. I tested the latter code also under Scala 3.3.0-RC2 and 3.3.1-RC1-bin-20230204-a356581-NIGHTLY and they behave as 3.2.2 does.