
2 changing the behavior of Foldable.maximumBy (from foldr to foldl) and changing the behavior of Data.List.maximumBy back to what it was before, and arguably the “better” definition. 3 adding minimumBy/maximumBy as a class method and changing only the list instance.
The third option is the best, but I'd check for API breakages first.
This also raises the question of whether using foldl over foldl' is the right thing to do, as I was under the impression that foldl will (at least for lists) always just accumulate a large heap of thunks, and one would always want to use foldl' instead. I postulate that if foldl' had been in the report, then it would have been used for maximumBy.
I tested maximumBy with foldl, and it runs in constant memory for lists, so extra strictness won't have any benefits in this particular case. The following snippet clearly shows it. ----- main = print $ maximumBy compare [1..100000000000] -- Copied from Data.Foldable with foldl1 replacing foldr1. maximumBy :: Foldable t => (a -> a -> Ordering) -> t a -> a maximumBy cmp = foldl1 max' where max' x y = case cmp x y of GT -> x _ -> y -----