Una pista es la desugaring de clases implícitas, se explica en the SIP-13:
implicit class RichInt(n: Int) extends Ordered[Int] {
def min(m: Int): Int = if (n <= m) n else m
...
}
serán transformados por el compilador de la siguiente manera:
class RichInt(n: Int) extends Ordered[Int] {
def min(m: Int): Int = if (n <= m) n else m
...
}
implicit final def RichInt(n: Int): RichInt = new RichInt(n)
Como puede ver, la función implícita que se crea tiene el mismo nombre que las clases originales. Supongo que se hace así para facilitar la importación de clases implícitas.
Así, en su caso, cuando se crea una clase implícita caso, hay un conflicto entre el nombre del método creado por el implicit
palabra clave y el objeto acompañante creado por la palabra clave case
.
Esto es un error. Abrí [SI-6227] (https://issues.scala-lang.org/browse/SI-6227), aunque no me sorprendería descubrir que es un duplicado. –
una 'clase implícita' no puede ser una 'clase de caso', esa es la única razón. – Valerin