Двойная карта в хаскеле? - PullRequest
       16

Двойная карта в хаскеле?

16 голосов
/ 05 января 2012

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

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

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

Ответы [ 2 ]

24 голосов
/ 05 января 2012

На самом деле, здесь есть хороший паттерн:

map           :: (a -> b) ->   [a]   ->   [b]
(map.map)     :: (a -> b) ->  [[a]]  ->  [[b]]
(map.map.map) :: (a -> b) -> [[[a]]] -> [[[b]]]

и т. Д.

21 голосов
/ 05 января 2012

Вы можете думать о map f как о преобразовании функции f :: a -> b в функцию в списках map f :: [a] -> [b], поэтому, если вы хотите преобразовать ее далее в функцию в списках списков, вам просто нужно использовать map снова, чтобы получить map (map f) :: [[a]] -> [[b]].

В данном конкретном случае это становится:

exampleF = map (map toLower)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...