Il nuovo programmatore Haskell sarà abbastanza presto andare alle fonti per vedere come viene implementato foldr
. Bene, il codice era semplice (non aspettatevi che i nuovi arrivati sappiano su OldList
o FTP
).Spiega come funziona il nuovo foldr in Haskell
Come funziona il nuovo codice?
-- | 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
Probabilmente non è un duplicato, ma [ho scritto una risposta su come ottenere '' foldr' da foldMap' qualche tempo fa] (http://stackoverflow.com/a/23319967/2751851). La risposta presuppone una familiarità di base con 'Monoid', quindi per favore dicci se ci vogliono troppe cose per scontate. – duplode