Proposal: Make minimumBy and maximumBy go through foldl1

Joe Hillenbrand joehillen at
Thu Jan 26 01:58:18 UTC 2017

Would the (hopeful) imminent linear types extension help here?

On Wed, Jan 25, 2017 at 4:24 PM, Edward Kmett <ekmett at> wrote:
> The current intent based on the ghc ticket traffic is to switch the
> implementation to foldl1 for the next release as a stopgap, but leave the
> door open to do something smarter in the future.
> The current foldr1 implementation is simply never a win, and a monoidal
> version devolves to a right fold for lists with the same bad behavior.
> If we later on figure out a way to efficiently exploit a strict monoidal
> accumulator for monoids that don't benefit from short-circuiting then a
> number of current Foldable combinators could benefit including this one, so
> we definitely want to leave the door open to doing things better in the
> future, but for now the left fold is an easy improvement over the status
> quo.
> -Edward
> On Wed, Jan 25, 2017 at 6:50 PM, David Laing <dave.laing.80 at>
> wrote:
>> Hi all,
>> I'm proposing that the implementations of minimumBy and maximumBy be
>> changed from using foldl1 to foldr1.
>> I found this in a GHC trac ticket[0] labelled 'Newcomer' that has more
>> details / discussion on that.
>> The points that stand out to me are:
>> - the Haskell report says that those methods should be implemented in
>> terms of foldl1 (although as instance methods of Foldable there might be
>> some wiggle room there)
>> - it helps solves a space leak (which at first glance feels like it might
>> be a more common problem than the options that foldl1 removes)
>> - from the discussion on the ticket, it seemed to be an agreeable middle
>> ground
>> As a side note: there have been a few proposals in the past to switch
>> these functions to use foldl', which seemed to have stalled.  I don't know
>> what the etiquette is around bringing up minor variations on old proposals
>> again, so I apologise if I've breached some kind of protocol here.
>> Although I guess I've already breached one protocol by pushing a  patch to
>> Phabricator for review without getting sign-off from the Core Libraries
>> Committee, so at least I'm being even handed with my clumsiness :)
>> Cheers,
>> Dave
>> [0]
>> _______________________________________________
>> Libraries mailing list
>> Libraries at
> _______________________________________________
> Libraries mailing list
> Libraries at

More information about the Libraries mailing list