This way these laws hold for non-empty lists: maximumBy f xs = last (sortBy f xs) minimumBy f xs = head (sortBy f xs)
Sjoerd Visscher On Sep 5, 2011, at 6:44 AM, Mario Blažević wrote: > I was recently surprised to discover that the maximum and maximumBy > functions always return the *last* maximum, while minimum and minimumBy > return the *first* minimum in the list. The following GHCi session > demonstrates this: > > $ ghci > GHCi, version 7.2.1: http://www.haskell.org/ghc/ :? for help > Loading package ghc-prim ... linking ... done. > Loading package integer-gmp ... linking ... done. > Loading package base ... linking ... done. > Loading package ffi-1.0 ... linking ... done. > Prelude> :module +Data.List Data.Ord > Prelude Data.List Data.Ord> let list = [(1, 'B'), (1, 'A')] > Prelude Data.List Data.Ord> maximumBy (comparing fst) list > (1,'A') > Prelude Data.List Data.Ord> minimumBy (comparing fst) list > (1,'B') > > I would normally consider this kind of gratuitous asymmetry a bug, but > seeing that these functions' implementations have been specified in the > Haskell 98 Library Report, I guess they are now a permanent feature of the > language. Can anybody explain the reason for this behaviour? > > > _______________________________________________ > Haskell-Cafe mailing list > [email protected] > http://www.haskell.org/mailman/listinfo/haskell-cafe _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
