如何使用猫类型类?

时间:2017-03-14 12:12:23

标签: scala scala-cats

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]

1 个答案:

答案 0 :(得分: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
}

此外,在猫0.9.0之前未添加it seems Foldable.intercalate