Evitando ambiguidade implícita de defesa em Scala

Eu estou tentando criar uma conversão implícita de qualquer tipo (digamos, Int) para uma String ...

Uma conversão implícita para String significa que os métodos RichString (como reverso) não estão disponíveis.

implicit def intToString(i: Int) = String.valueOf(i)
100.toCharArray  // => Array[Char] = Array(1, 0, 0)
100.reverse // => error: value reverse is not a member of Int
100.length // => 3

Uma conversão implícita para RichString significa que os métodos String (como toCharArray) não estão disponíveis

implicit def intToRichString(i: Int) = new RichString(String.valueOf(i))
100.reverse // => "001"
100.toCharArray  // => error: value toCharArray is not a member of Int
100.length // => 3

Usando ambas as conversões implícitas significa métodos duplicados (como comprimento) são ambíguos.

implicit def intToString(i: Int) = String.valueOf(i)
implicit def intToRichString(i: Int) = new RichString(String.valueOf(i))
100.toCharArray  // => Array[Char] = Array(1, 0, 0)
100.reverse // => "001"
100.length // => both method intToString in object $iw of type 
   // (Int)java.lang.String and method intToRichString in object
   // $iw of type (Int)scala.runtime.RichString are possible 
   // conversion functions from Int to ?{val length: ?}

Então, é possível converter implicitamente para String e ainda suportar todos os métodos String e RichString?

questionAnswers(6)

yourAnswerToTheQuestion