Básicamente he definido un tipo de datos de árbol que se define de la siguiente manera:Inserción de un valor en un árbol ordenado en Haskell
data Tree a = Empty
| Leaf a
| Node (Tree a) a (Tree a)
deriving (Eq, Ord, Show)
ahora tengo que crear una función para insertar un valor en un árbol ordenado (que no tiene que ordenar el árbol, solo agrega el valor). Esto es lo que he encontrado hasta el momento:
insert :: a -> Tree a -> Tree a
insert x Empty = Leaf x
insert x (Leaf m) | m < x = Node (Leaf x) m Empty
| otherwise = Node Empty m (Leaf x)
insert x (Node l m r) | x > m = Node (Leaf l) m (insert x r)
| otherwise = Node (insert x l) m (Leaf r)
Sin embargo, cuando ejecuto este me sale el siguiente mensaje de error:
no pudo igualar esperada tipo 'A' (una rígida variable) contra el tipo inferido 'Árbol a' 'a' está vinculado por la firma de tipo para 'insertar' en Main.hs: 11: 10 En el primer argumento de 'Leaf', concretamente 'l' En la primera argumento de 'nodo', a saber '(Leaf l)' En la expresión: nodo (Leaf l) m (inserto xr)
supongo que es algo que ver con los tipos, pero no puedo ver dónde he puesto ningún tipo que no deberían estar allí.
"Dale a un hombre un pez y lo alimentas por un día; enséñale a pescar y lo alimentarás para toda la vida". ¡Gran respuesta! – yairchu