Comparing flip compare
GHCmod-vim hinted at an improvement in some code I was writing:
reverse $ sort
why not sortBy (flip compare)
So I looked at the type signatures for each of these.
λ > :t reverse $ sort
λ > Ord a => [a] -> [a]
λ > :t sortBy
λ > (a -> a -> Ordering) -> [a] -> [a]
λ > :t (flip compare)
λ > Ord b => b -> b -> Ordering
flip
is just f x y = f y x
A little reminder of how compare
works:
λ > compare 1 2
λ > LT
λ > flip compare 1 2
λ > GT
This is the part that wasn’t obvious to me; that by simply flipping the comparison we’re reversing the resulting sorted list. At that point we can see that sortBy
is traversing the list once whereas reverse $ sort
is running through the list twice.