Neuer Haskell-Programmierer wird bald genug zu Quellen gehen, um zu sehen, wie foldr
implementiert wird. Nun, der Code war einfach (erwarte nicht, dass Neulinge etwas über OldList
oder FTP
wissen).Erklären Sie, wie der neue Folder in Haskell funktioniert
Wie funktioniert der neue Code?
-- | 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
Wahrscheinlich kein Duplikat, aber [Ich schrieb eine Antwort auf immer 'foldr' von' foldMap' vor einer Weile] (http://stackoverflow.com/a/23319967/2751851). Die Antwort setzt die grundsätzliche Vertrautheit mit "Monoid" voraus, also sagen Sie uns bitte, ob es zu viele Dinge als selbstverständlich betrachtet. – duplode