Básicamente he hecho un tipo de árbol de árbol polimórfico y necesito una manera de contar la cantidad de elementos en un árbol dado. Aquí está la declaración de mi árbol de tipo de datos:Contando elementos en un árbol en Haskell
data Tree a = Empty
| Leaf a
| Node (Tree a) a (Tree a)
deriving (Eq, Ord, Show)
Así que puede definir un árbol de INT así:
t :: Tree Int
t = Node (Leaf 5) 7 (Node (Leaf 2) 3 (Leaf 7))
Sin embargo, necesito una función para contar el número de elementos en una de estas liza. He definido esta función recursiva, pero me sale el error "tipo inferido no es suficientemente general":
size :: Tree a -> Int
size Empty = 0
size (Leaf n) = 1
size (Node x y z) = size x + size y + size z
¿Hay algo aquí que no debería estar haciendo?
¿No sería 'tamaño x + 1 + tamaño z'? Como él está contando los elementos y cada nodo contiene un elemento. – BaroqueBobcat
@BaroqueBobcat: Argh ... Sip;) – Dario
En realidad, el tipo de 'size' tal como está escrito sería el tipo infinito' Tree (Tree (Tree ...))) -> Int'. En casos como estos, un buen truco es siempre dejar de lado la firma de tipo ofensivo y dejar que el compilador le diga cuál cree que debería ser el tipo correcto. En este caso, GHC me dice que está tratando de construir un tipo infinito ... – yatima2975