Haskell arbre binaire avec la valeur clé

voix
3

Je veux construire arbre binaire avec la clé - leafs valeur avec tuple (k, v).

Mon code:

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))

Maintenant, je suis en train de remplir cet arbre:

fillTree :: Int -> Tree k v -> Tree k v
fillTree x tree = treeInsert (x, x) tree

Mais je reçois cette erreur:

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

Quelle est la cause et comment puis-je résoudre ce problème?

Créé 20/07/2011 à 18:38
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
6

Votre type est trop général ou trop spécifique. CA devrait etre

fillTree :: Int -> Tree Int Int -> Tree Int Int

ou

fillTree :: (Ord a) => a -> Tree a a -> Tree a a

Votre déclaration d' origine a essayé d'insérer (Int, Int)dans un Tree k v pour tout k,v . Il a dit que peu importe quel type d'arbre que vous avez, nous pouvons insérer une paire de Ints en elle. Ceci est clairement un non - sens, et que votre signature treeInsertindique, seules les paires de type (k, v)peut être inséré dans un Tree k v.

treeInsert :: (Ord k) => (k, v) -> Tree k v -> Tree k v
Créé 20/07/2011 à 18:47
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more