Этот код из задания, которое я уже решил.Тем не менее я пытаюсь выяснить, смогу ли я исправить свою первоначальную попытку.
Итак, мы получили эту древовидную структуру и функцию foldTree.
data Tree a = Leaf a
| Node (Tree a) (Tree a)
foldTree :: (b -> b -> b) -> (a -> b) -> Tree a -> b
foldTree op f (Leaf x) = f x
foldTree op f (Node l r) = foldTree op f l `op` foldTree op f r
Теперь mapTree должен быть реализован с использованием foldTree.Я сделал это следующим образом.
mapTree :: (a -> b) -> Tree a -> Tree b
mapTree' f tree = foldTree Node (Leaf . f) tree
То, что я изначально придумал и до сих пор не могу получить на работе, это:
mapTree :: (a -> b) -> Tree a -> Tree b
mapTree f tree = foldTree Node transFunc tree
where transFunc :: Tree a -> Tree b
transFunc (Leaf x) = Leaf (f x)
transFunc (Node l r) = Node (transFunc l) (transFunc r)