me escribió el siguiente código para el manejo de un árbol binario polimórficos en Haskell como una preparacion para el examen de la programación funcional de la próxima semana:Haskell polimórfica árbol Suma
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)
Ahora tengo el problema, que el código no hace compila:
...\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>
¿Sabes qué le pasa a treeSum? Creo que tiene algo que ver con el tipo polimórfico de ITree, pero no sé cómo resolverlo. ¿Debo especificar que el tipo t debe ser un tipo que se puede contar/enumerar? ¿Probablemente con una instancia de clase de tal tipo?
Gracias de antemano por su ayuda!
Simon
¿Qué debería 'treeSum (Node" marshmellow "Leaf Leaf)' be? – dave4420
No hay necesidad de eso :) ¡Pero para Floats! – saimn
Correcto, pero el tipo que das para 'treeSum' promete que funciona para cualquier tipo' t', incluso 'String'. – dave4420