import Data.Function (on)
import Data.List (maximumBy)

maximumWith :: Ord b => (a -> b) -> [a] -> a
maximumWith f = maximumBy $ on compare f

このfを消したくなるのは病気