Clases de valor introducen métodos públicos no deseados

Mirando algunos scala-docs de mis bibliotecas, me pareció que hay un ruido no deseado de clases de valor. Por ejemplo:

implicit class RichInt(val i: Int) extends AnyVal {
  def squared = i * i
}

Esto introduce un símbolo no deseado.i:

4.i   // arghh....

Eso aparece tanto en la documentación de Scala como en la finalización automática de IDE, lo que realmente no es bueno.

Entonces ... ¿alguna idea de cómo mitigar este problema? Quiero decir que puedes usarRichInt(val self: Int) pero eso no lo hace mejor (4.self, wth?)

EDITAR:

En el siguiente ejemplo, ¿el compilador borra el objeto intermedio o no?

import language.implicitConversions

object Definition {
  trait IntOps extends Any { def squared: Int }
  implicit private class IntOpsImpl(val i: Int) extends AnyVal with IntOps {
    def squared = i * i
  }
  implicit def IntOps(i: Int): IntOps = new IntOpsImpl(i)  // optimised or not?
}

object Application {
  import Definition._
  // 4.i  -- forbidden
  4.squared
}

Respuestas a la pregunta(5)

Su respuesta a la pregunta