Двойная карта в haskell?
Я все еще новичок в хэскелле. Могу ли я сделать двойную карту в haskell?
Например, если у меня есть [[Char]]
, и я хочу преобразовать каждый Char
в каждый [Char]
в нижний регистр, есть ли простой способ сделать это, а не что-то вроде:
exampleF [] = []
exampleF (x:xs) = (map toLower x) : exampleF xs
Ответы
Ответ 1
Вы можете думать о map f
как преобразовании функции f :: a -> b
в функцию в списках map f :: [a] -> [b]
, поэтому, если вы хотите преобразовать ее дальше в функцию в списках списков, вам просто нужно использовать map
снова, чтобы получить map (map f) :: [[a]] -> [[b]]
.
В этом конкретном случае это становится:
exampleF = map (map toLower)
Ответ 2
На самом деле, здесь есть хороший шаблон:
map :: (a -> b) -> [a] -> [b]
(map.map) :: (a -> b) -> [[a]] -> [[b]]
(map.map.map) :: (a -> b) -> [[[a]]] -> [[[b]]]
и т.д.