【发布时间】:2018-05-04 02:27:54
【问题描述】:
我想定义一个树形数据结构,它的边缘有一个标签,这是我最初的想法:
sealed trait Tree[+N,+E]
case class Branch[N,E](value:N, children:Map[E, Tree[N,E]]) extends Tree[N,E]
case class Leaf[N](value:N) extends Tree[N, Unit]
你可能猜到了,如果我像下面这样创建一个树实例,实例的类型将是Tree[Int, Any]。我也不想为E 提供逆变类型。
val tree =
Branch(0,
Map(
"a" -> Leaf(1),
"b" -> Branch(2,
Map(
"c" -> Leaf(4))))
)
我想知道实现这个 Tre 的更好方法。我听说过 Fix 类型类和递归方案,但我不知道它们在这里是否有用。
【问题讨论】:
标签: scala types functional-programming