Haskellで使用されているのと同様のパターンに従って、Scalaで機能的なbinary-search-treeを実装するための演習を行っています。私は次のような構造を持っています:
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 ()のビューバウンドを定義する必要があるようです。ただし、ビューバウンドが受け入れられないため、トレイトでこれを行うことはできません。AOrdered[A <% Ordered[A]]BranchLeafTreeNodeTreeNode
私が理解しているように、<%-style view-boundsは定義の構文糖衣であるため、トレイトimplicit内で手動で境界を定義するように記述する方法が必要です。TreeNodeしかし、これをどのように行うべきかはわかりません。私は少し見回しましたが、ある種の暗黙の定義が必要であるということよりもはるかに進んでいません。
誰かが私を正しい方向に向けることができますか?私はこれに完全に間違った角度からアプローチしていますか?