小猫 - 模棱两可的进口(再次) [英] Kittens - ambiguous imports (again)
问题描述
这个答案https://stackoverflow.com/a/56366311/2682459 展示了如何使用对象以在使用 Kitten 时提供类型类的自定义实现.将相同的原理应用于以下代码虽然不起作用:
This answer https://stackoverflow.com/a/56366311/2682459 shows how it is possible to use an object to provide a custom implementation of a typeclass when using Kitten. Applying the same principle to the following code though doesn't work:
package com.xxx.yyy.zzz
import cats._, cats.derived._, cats.implicits._
object Test extends App {
case class Inner(double: Double)
case class Outer(inner: Inner, s: String)
implicit object doubleEq extends Eq[Double] {
override def eqv(x: Double, y: Double): Boolean = Math.abs(x - y) < 0.1
}
implicit val outerEq: Eq[Outer] = {
import derived.auto.eq._
derived.semi.eq[Outer]
}
implicitly[Eq[Double]]
val testCC1 = Outer(Inner(1.01d), "BlahBlahBlah")
val testCC2 = Outer(Inner(1.00d), "BlahBlahBlah")
println(testCC1 === testCC2)
}
implicitly[Eq[Double]]
再次表明我有模糊的隐含:
The implicitly[Eq[Double]]
shows that once again I have ambiguous implicits:
Error:(20, 13) ambiguous implicit values:
both value catsKernelStdOrderForDouble in trait DoubleInstances of type => cats.kernel.Order[Double] with cats.kernel.Hash[Double]
and object doubleEq in object Test of type com.xxx.yyy.zzz.Test.doubleEq.type
match expected type cats.Eq[Double]
implicitly[Eq[Double]]
我该如何解决这个问题?我真的不想挑选我导入的猫隐式,因为这不是很可扩展!
How do I work round this one? I really don't want to have to cherry pick the cats implicits I import as this isn't very scalable!
推荐答案
更改您的导入.不要导入cats.instances.double._
Change your imports. Don't import cats.instances.double._
import cats._, cats.derived._
import cats.instances.string._ // Outer uses Double and String
import cats.syntax.eq._ // for ===
两者
implicit val doubleEq: Eq[Double] = new Eq[Double] {
override def eqv(x: Double, y: Double): Boolean = Math.abs(x - y) < 0.1
}
和
implicit object doubleEq extends Eq[Double] {
override def eqv(x: Double, y: Double): Boolean = Math.abs(x - y) < 0.1
}
工作.
http://eed3si9n.com/herding-cats/import-guide.html
https://blog.softwaremill.com/9-tips-about-using-cats-in-scala-you-might-want-to-know-e1bafd365f88 建议 2)
这篇关于小猫 - 模棱两可的进口(再次)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!