タプル(k、v)でキー値リーフを持つバイナリツリーを構築したい。ハスケルキー値付きバイナリツリー
マイコード:でき
Couldn't match type `v' with `Int'
`v' is a rigid type variable bound by
the type signature for fillTree :: Int -> Tree k v -> Tree k v
原因は何とどのように:私はこの木埋めるためにしようとしている今
data Tree k v = EmptyTree
| Node (k, v) (Tree k v) (Tree k v)
deriving (Show, Eq, Ord, Read)
emptyTree :: (k,v) -> Tree k v
emptyTree (k,v) = Node (k, v) EmptyTree EmptyTree
treeInsert :: (Ord k) => (k,v) -> Tree k v -> Tree k v
treeInsert (k,v) EmptyTree = emptyTree (k, v)
treeInsert (a, b) (Node (k,v) left right)
| a == k = (Node (a,b) left right)
| a < k = (Node (a, b) (treeInsert (a, b) left) right)
| a > k = (Node (a, b) left (treeInsert (a, b) right))
:
fillTree :: Int -> Tree k v -> Tree k v
fillTree x tree = treeInsert (x, x) tree
をしかし、私はこのエラーを取得します私が直します?
このような状況では、型シグネチャを削除し、GHCiでファイルを読み込み、コンパイラが*どのような型にするべきかを確認すると役に立ちます。 –
'emptyTree'は本当に悪い名前です。誰もが' EmptyTree'を返すと期待しています。より良い名前は 'singleton'や' singleNode'のようなものです。 – Landei