低优先级含义中的歧义

pat*_*rit 6 scala scala-implicits

我有以下Scala代码片段:

  import java.io.PrintWriter

  trait Write[-A] {
    def apply(out: PrintWriter)(x: A): Unit
  }

  trait LowPriorityWrites {
    implicit object any extends Write[Any] {
      override def apply(out: PrintWriter)(x: Any) = out.print(x)
    }
  }

  object Write extends LowPriorityWrites {
    implicit def iterable[A](implicit write: Write[A]): Write[Traversable[A]] = new Write[Traversable[A]] {
      override def apply(out: PrintWriter)(xs: Traversable[A]) = {
        xs foreach write(out)
        out.println()
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

基本上,我想要实现的是首先寻找隐含的Write对象.如果不能,回落到默认.toStringAnyLowPriorityWrites.

但是,这种方法不起作用:

ambiguous implicit values:
[error]  both method iterable in object Write of type [A](implicit write: Write[A])Write[Traversable[A]]
[error]  and object any in trait LowPriorityWrites of type Write.any.type
[error]  match expected type Write[Seq[Long]]
Run Code Online (Sandbox Code Playgroud)