Двойная карта в haskell? - программирование
Подтвердить что ты не робот

Двойная карта в haskell?

Я все еще новичок в хэскелле. Могу ли я сделать двойную карту в haskell?

Например, если у меня есть [[Char]], и я хочу преобразовать каждый Char в каждый [Char] в нижний регистр, есть ли простой способ сделать это, а не что-то вроде:

exampleF [] = []
exampleF (x:xs) = (map toLower x) : exampleF xs
4b9b3361

Ответ 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]]]

и т.д.