Я выполняю упражнение для реализации функционального дерева двоичного поиска в 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
. Похоже, мне нужно определить ограничение представления на A ([A <% Ordered[A]]
) на Branch
и Leaf
, а также на показатель TreeNode
. Я не могу это сделать по признаку TreeNode
, однако, потому что границы представления не принимаются.
Как я понимаю, <%
-style view-bounds являются синтаксическим сахаром для определения implicit
, поэтому должен быть способ записи для определения привязки вручную в пределах TreeNode
. Я не уверен, как я должен это делать. Я немного огляделся, но не получил намного больше, чем нужно определить какие-то неявные потребности.
Может ли кто-нибудь указать мне в правильном направлении? Я полностью подхожу к этому с неправильного угла?