minimumBy, . , (+5) (). .
[4,3,2,1]
compare 4 3 => compare (4+5) (3+5) => compare 9 8 => GT
compare 3 2 => compare (3+5) (2+5) => compare 8 7 => GT
compare 2 1 => compare (2+5) (1+5) => compare 8 7 => GT
, (3+5),(2+5) .
(+5), . , , :
map (\x -> (expensive x, x)) [4,3,2,1]
, expensive (+5) . :
snd $ minimumBy (comparing fst) $ map (\x -> (expensive x, x)) [4,3,2,1]
snd $ minimum $ map (\x -> (expensive x, x)) [4,3,2,1]
, , [4,3,2,1] , , expensive .
However, note that the latter will not only return a random list item [4,3,2,1]that minimizes expensive, but it will be the minimum such item. That is, when expensive x == expensive y, the function minimumbreaks the connection by comparing xit ydirectly. The first does not give such a guarantee.