我正在做一个练习,以在 Scala 中实现一个功能性二叉搜索树,遵循我在 Haskell 中看到的类似模式。我有一个看起来像这样的结构:
trait TreeNode[A] {
def isLeaf: Boolean
def traverse: Seq[A]
...
}
case class Branch[A](value: A, left: TreeNode[A], right: TreeNode[A]) extends TreeNode[A] {
def isLeaf: Boolean = false
def traverse: Seq[A] = ...
...
}
case class Leaf[A]() extends TreeNode[A] {
def isLeaf: Boolean = true
def traverse: Seq[A] = Seq[A]()
...
}
我想设置一个类型约束,A
以便它只接受扩展的对象Ordered
。看起来我需要在and上定义 A ( [A <% Ordered[A]]
)以及trait 上的视图绑定。但是,我不能在trait 上执行此操作,因为不接受视图边界。Branch
Leaf
TreeNode
TreeNode
据我了解,<%
-style view-bounds 是implicit
定义的语法糖,因此应该有一种方法可以编写在TreeNode
特征中手动定义边界。不过,我不确定我应该怎么做。我环顾四周,但没有比需要定义某种隐式更进一步。
谁能指出我正确的方向?我是否完全从错误的角度来解决这个问题?