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