我仍然是一名哈斯克尔初学者.我可以在哈斯克尔做双重地图吗?
例如,如果我有一个[[Char]]
并且我想将每个Char
中的每个转换[Char]
为小写,那么有一种简单的方法可以做到这一点,而不是像:
exampleF [] = []
exampleF (x:xs) = (map toLower x) : exampleF xs
Run Code Online (Sandbox Code Playgroud)
luq*_*qui 24
事实上,这里有一个很好的模式:
map :: (a -> b) -> [a] -> [b]
(map.map) :: (a -> b) -> [[a]] -> [[b]]
(map.map.map) :: (a -> b) -> [[[a]]] -> [[[b]]]
Run Code Online (Sandbox Code Playgroud)
等等
ham*_*mar 21
您可以想到map f
,将函数f :: a -> b
转换为列表中的函数map f :: [a] -> [b]
,因此如果要将其进一步转换为列表列表中的函数,则只需map
再次使用即可map (map f) :: [[a]] -> [[b]]
.
在这种特殊情况下,这变为:
exampleF = map (map toLower)
Run Code Online (Sandbox Code Playgroud)