<p dir="ltr">Suppose you convince me that hiding elements from foldMap is bad (I'm easy to persuade!). There is still, I believe, a much more serious problem. Specifically, you claim that your new law somehow takes care of potentially infinite containers, but I do not see how it does. Consider, for example, the instance for Data.Tree.Tree:</p>
<p dir="ltr">data Tree a = Node { rootLabel :: a, -- ^ label value<br>
subForest :: Forest a -- ^ zero or more child trees<br>
}</p>
<p dir="ltr">instance Foldable Tree where<br>
foldMap f (Node x ts) = f x `mappend` foldMap (foldMap f) ts</p>
<p dir="ltr">If the first child of the root is an infinite tree, your search will never reach the root of the second child! Generally, foldMap on any potentially infinite tree will be forced to work (at least approximately) breadth-first.</p>