State a law for foldMap
After being prodded by /u/random_crank on reddit, I realized there is a law we can state for foldMap
:
A monoid homomorphism g
is a function such that
g mempty = mempty
g (mappend a b) = mappend (g a) (g b)
holds.
For any monoid homomorphism g
:
foldMap (g . f) = g . foldMap f
This isn't strictly a free theorem as it relies on the Monoid
laws, but it is true and has the same general flavor as the equally complicated free theorem for foldr
.
This law is a bit technical, but is a nice tool for equational reasoning, and gives rise to a much nicer foldMap
-based version of the "banana split" theorem for foldr
.
foldMap f &&& foldMap g = foldMap (f &&& g)
Trac metadata
Trac field | Value |
---|---|
Version | 7.10.1-rc1 |
Type | FeatureRequest |
TypeOfFailure | OtherFailure |
Priority | low |
Resolution | Unresolved |
Component | Core Libraries |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | core-libraries-committee@haskell.org |
Operating system | |
Architecture |