1
import cats._
import cats.data._
import cats.implicits._
import cats.instances.all._

...
  def test = Foldable[List].intercalate(List("a", "b", "c"), "-")
...

结果为:

could not find implicit value for parameter instance: cats.Foldable[List]

为什么它不起作用以及如何解决它?看起来这只是他们文档的副本:

scala> import cats.implicits._
scala> Foldable[List].intercalate(List("a","b","c"), "-")
res0: String = a-b-c

编辑1:

即使import cats.instances.all._按照建议删除它仍然不起作用。现在它崩溃了:

value intercalate is not a member of cats.Foldable[List]
4

1 回答 1

2

您将实例导入Foldable[List]两次:一次通过import cats.implicits._和一次通过import cats.instances.all._。这样他们就变得模棱两可了。

查看源代码,您可以看到它cats.instances.allcats.implicits. 简化:

package cats {
  package object instances {
    object all extends AllInstances
  }

  object implicits extends syntax.AllSyntax with instances.AllInstances
}

此外,它似乎 Foldable.intercalate直到 cat 0.9.0 才添加。

于 2017-03-14T12:31:03.720 回答