
I stand corrected. https://gitlab.haskell.org/ghc/ghc/-/merge_requests/4355 is merged and seems I misread the original e-mail. Foldable should prefer foldMap' (or foldMap) because it offers most opportunities (Monoid mappend is associative). Trees, SnocList work better by default. For lists the implementation could use foldl', because in that special case it makes more sense. These methods (sum, product) are part of Foldable class specifically so they can be overriden. - Oleg On 23.12.2020 12.44, Oleg Grenrus wrote:
Because the related change proposal(s) are never accepted nor implemented.
Most recent one is quite recent though. https://mail.haskell.org/pipermail/libraries/2020-October/030862.html
- Oleg
On 23.12.2020 8.32, Viktor Dukhovni wrote:
Is there a compelling reason for:
sum = getSum #. foldMap' Sum product = getProduct #. foldMap' Product
rather than:
sum = foldl' (+) 0 product = foldl' (*) 1
A quick ghci session with today's GHC head yields:
λ> import qualified Data.Foldable as F λ> :set +s
λ> F.sum [0..10000000] 50000005000000 (2.98 secs, 1,612,368,368 bytes)
λ> F.foldl' (+) 0 [0..10000000] 50000005000000 (0.28 secs, 880,065,112 bytes)
The `foldl'` variant looks substantially more efficient (at least for lists), is there some important context in which `foldMap'` is preferable?
_______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries