【发布时间】:2020-08-03 03:35:12
【问题描述】:
我正在使用 Cats 处理 Scala,我正在尝试在 Tree[A] 类型上创建 Show(不是书本练习)。基本上,我正在尝试创建一个实例,这样如果我有任何树的基础值具有Show 实例,我可以调用tree.show。我正在为如何表示这一点而苦苦挣扎。
到目前为止,我有
sealed trait Tree[+A]
final case class Branch[A](left: Tree[A], right: Tree[A]) extends Tree[A]
final case class Leaf[A](value: A) extends Tree[A]
object Tree {
implicit val show: Show[Tree[Show[_]]] = new Show[Tree[Show[_]]] {
def show(t: Tree[Show[_]]): String = t match {
case Branch(left, right) => s"*\n/\n${show(left)} ${show(right)}\n"
case Leaf(value) => value.show
}
}
}
我收到missing argument list for method show in trait ContravariantShow
Unapplied methods are only converted to functions when a function type is expected.
You can make this conversion explicit by writing show _ or show(_) instead ofshow.
当我改写为value.show(_) 时,我得到了type mismatch; found : _$3 => String required: String
当我只写了一个字符串"value" 进行测试时,我的Tree[Int] 实例无法在Tree[Int] 类型上找到方法show。
关于如何完成这项工作的任何想法?
【问题讨论】:
标签: scala implicit scala-cats