所以我在scala中有一个多态数据类型Tree,定义如下
sealed trait Tree[+A]
final case class Node[A](value: A) extends Tree[A]
final case class Branch[A](value: A, left: Tree[A], right: Tree[A]) extends Tree[A]
object Tree{
implicit def eqTree[T]: Eq[Tree[T]] = new Eq[Tree[T]] {
override def ==(t1: Tree[T], t2: Tree[T]): Boolean = true
}
}
一个类型Eq
trait Eq[T]{
def == (t1: T, t2: T) : Boolean
}
我正在尝试
object App1 extends App{
import Tree._
def equality[T](t1: T, t2: T)(implicit eq: Eq[T]): Boolean = eq.==(t1, t2)
println(equality(Node(1), Node(2)))
}
但是我收到以下错误
Error:(35, 19) could not find implicit value for parameter eq: typeclasses.Eq[typeclasses.Node[Int]]
println(equality(Node(1), Node(2)))
答案 0 :(得分:4)
正如错误所述,编译器正在尝试查找Eq[Node[Int]]
,并且范围内没有此类值。您已定义Eq[Tree[T]]
。
所以基本上这就是编译器所看到的:
equality[Node[Int]](Node(1), Node(2))
但你真的想要这个:
println(equality[Tree[Int]](Node(1), Node(2)))