Новый программист Haskell скоро перейдет к источникам, чтобы увидеть, как реализовано foldr
. Ну, код был простым (не ожидайте, что новички узнают о OldList
или FTP
).Объясните, как новый складной инструмент работает в Haskell
Как работает новый код?
-- | Map each element of the structure to a monoid,
-- and combine the results.
foldMap :: Monoid m => (a -> m) -> t a -> m
foldMap f = foldr (mappend . f) mempty
-- | Right-associative fold of a structure.
--
-- @'foldr' f z = 'Prelude.foldr' f z . 'toList'@
foldr :: (a -> b -> b) -> b -> t a -> b
foldr f z t = appEndo (foldMap (Endo #. f) t) z
Вероятно, не дубликат, но [я написал ответ на получение '' foldr' из foldMap' некоторое время назад] (HTTP://stackoverflow.com/a/23319967/2751851). Ответ предполагает базовое знакомство с «Monoid», поэтому, пожалуйста, сообщите нам, если это требует слишком много вещей как должное. – duplode