如何使用猫类型类?

How to use cats typeclasses?

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]

您正在为 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
}

此外,it seems Foldable.intercalate 直到 cats 0.9.0 才被添加。