Я пытаюсь определить функцию карты, используя foldr
Я нашел два следующих решения, однако я не совсем уверен, как они работают.
map' :: (a -> b) -> [a] -> [b]
map' f = foldr ((:) . f) []
map'' :: (a -> b) -> [a] -> [b]
map'' f = foldr (\x xs -> f x : xs) []
Я новичок в Haskell и foldr, поэтому я пытаюсь понять, что делает ((:) . f)
в первом решении и что (\x xs -> f x : xs)
во втором решении.
Я также не понимаю, как foldr может обрабатывать случай пустого списка.
Было бы очень полезно, если бы я мог получить простое пошаговое объяснение этого, с точки зрения непрофессионала.