我正在尝试为数据类型编写函数mapTree :: (a -> b) -> Tree a -> Tree b
data Tree a = Empty | Node a [Tree a] deriving Show
我知道如果树只有2个(或任意数量)可能的分支,该怎么做,但我有点卡住了,目前为止我的代码如下:
mapTree :: (a -> b) -> Tree a -> Tree b
mapTree _ Empty = Empty
mapTree f (Node a []) = Node (f a) []
mapTree f (Node a (t:ts)) = Node (f a) (mapTree f t : mapTree f ts)
但是mapTree f ts
是不允许的,因为ts的类型是[Tree a]。有没有什么办法可以重写它,这样我就不会被这个错误卡住了?
1条答案
按热度按时间6yt4nkrj1#
将长度为
k
的每个列表视为单独的情况:看看这表情
您可以使用
map
简化此操作,其中Map的函数为mapTree f
:它允许您用单个case替换无限数量的固定长度case