By Alvin Alexander. Last updated: January 25, 2021
I was surprised to see this Scala 3 compiler error just now:
Class differs only in case ... Such classes will
overwrite one another on case-insensitive filesystems
What happened was that I created this code:
trait Hello:
def greet = "hello"
trait Hi:
def greet = "hi"
class Greeter extends Hello, Hi:
override def greet = "I greet thee!"
@main def greeter =
val g = Greeter()
println(g.greet == "I greet thee!") // true
And apparently the Greeter
class and greeter
method collide with one another to create this compiler error message:
[error] -- Error: src/main/scala/traits/mixin_order/MixinOrder.scala:18:10
[error] 18 | class Greeter extends Hello, Hi:
[error] | ^
[error] | |class Greeter differs only in case from
|class greeter in package mixins.test1.
Such classes will overwrite one another on case-insensitive filesystems.
[error] one error found
I don’t know if this error will continue to stay like this in Scala 3, but that’s the way it works today.