Дело в том, что, поскольку Parse
расширяет String => T
, имплициты parseLong
, parseDouble
, parseInt
определяют не только экземпляры Parse
, но и неявные преобразования String => Long
, String => Double
, String => Int
.А поскольку .toLong
, .toDouble
, .toInt
являются методами расширения, это создает неоднозначности.
Вы можете удалить extends (String => T)
или разрешить методы расширения вручную:
object Parse {
def apply[T](f: String => T) = new Parse[T](f)
implicit val parseLong: Parse[Long] = Parse[Long](s => new StringOps(s).toLong)
implicit val parseDouble: Parse[Double] = Parse[Double](s => new StringOps(s).toDouble)
implicit val parseInt: Parse[Int] = Parse[Int](s => new StringOps(s).toInt)
}