来週の関数型プログラミング試験の準備として、Haskellでポリモーフィック二分木を処理するための次のコードを作成しました。
data ITree t = Leaf | Node t (ITree t) (ITree t)
deriving (Eq, Ord, Show)
treeSum :: ITree t -> Int
treeSum Leaf = 0
treeSum (Node n t1 t2) = n + (treeSum t1) + (treeSum t2)
今、私はコードがコンパイルされないという問題を抱えています:
...\tree.hs:8:26:
Couldn't match type `t' with `Int'
`t' is a rigid type variable bound by
the type signature for treeSum :: ITree t -> Int
at ...\tree.hs:7:1
In the first argument of `(+)', namely `n'
In the first argument of `(+)', namely `n + (treeSum t1)'
In the expression: n + (treeSum t1) + (treeSum t2)
Failed, modules loaded: none.
Prelude>
treeSumの何が問題になっているのか知っていますか?ポリモーフィックタイプのITreeと関係があると思いますが、これを解決する方法がわかりません。タイプtはカウント/列挙可能なタイプでなければならないことを指定する必要がありますか?おそらくそのような型クラスのクラスインスタンスで?
よろしくお願いします!
サイモン