Skip to content

Slower Data.Foldable.maximumBy,minimumBy

Summary

Data.Foldable.maximumBy and Data.Foldable.minimumBy are slower in 9.2.5 compared to 8.10.7.

8.10.7:

benchmarking maximumBy
time                 5.418 ms   (5.362 ms .. 5.467 ms)
                     0.999 R²   (0.998 R² .. 1.000 R²)
mean                 5.470 ms   (5.432 ms .. 5.512 ms)
std dev              114.4 μs   (92.09 μs .. 148.8 μs)

benchmarking minimumBy
time                 5.470 ms   (5.454 ms .. 5.484 ms)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 5.459 ms   (5.451 ms .. 5.467 ms)
std dev              23.79 μs   (19.56 μs .. 30.25 μs)

9.2.5:

benchmarking maximumBy
time                 8.138 ms   (8.085 ms .. 8.191 ms)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 8.158 ms   (8.127 ms .. 8.194 ms)
std dev              95.65 μs   (69.92 μs .. 152.0 μs)

benchmarking minimumBy
time                 7.980 ms   (7.945 ms .. 8.019 ms)
                     1.000 R²   (0.999 R² .. 1.000 R²)
mean                 7.944 ms   (7.911 ms .. 7.971 ms)
std dev              89.16 μs   (71.76 μs .. 110.6 μs)
import Criterion.Main
import Data.Foldable

main :: IO ()
main = defaultMain
    [ env (pure xs_) $ \xs -> bgroup ""
        [ bench "maximumBy" $ whnf (maximumBy compare) xs
        , bench "minimumBy" $ whnf (minimumBy compare) xs
        ]
    ]
  where
    xs_ = [1..2^20] :: [Int]
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information