Я работаю через Scala с Cats и пытаюсь создать Show
для типа Tree[A]
(не книжное упражнение). По сути, я пытаюсь создать экземпляр таким образом, чтобы, если у меня есть какое-либо дерево, базовые значения которого имеют экземпляр 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 of
Показать .
Когда я переписал как value.show(_)
Я получил type mismatch; found : _$3 => String required: String
Когда я написал для проверки только строку "value"
, мой экземпляр Tree[Int]
не смог найти метод show
для типа Tree[Int]
.
Любые идеи о том, как я могу сделать это работа?