Klasy wartości wprowadzają niepożądane metody publiczne

Patrząc na niektóre scala-docy moich bibliotek, wydawało mi się, że istnieją pewne niepożądane szumy z klas wartości. Na przykład:

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

Wprowadza to niepożądany symboli:

4.i   // arghh....

Te rzeczy pojawiają się zarówno w dokumentach scala, jak iw automatycznym uzupełnianiu IDE, co nie jest dobre.

Więc ... wszelkie pomysły na złagodzenie tego problemu? To znaczy, możesz użyćRichInt(val self: Int) ale to nic nie poprawia (4.self, co?)

EDYTOWAĆ:

Czy w poniższym przykładzie kompilator usuwa obiekt pośredni, czy nie?

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
}

questionAnswers(5)

yourAnswerToTheQuestion