> module Data.List.Extras (pairs, argmax) where
>
> import Control.Applicative ((<*>))
> import Data.Function (on)
> import Data.List (maximumBy)
`pairs` takes a list, and returns a list of consecutive elements pairs:
> pairs :: [a] -> [(a,a)]
> pairs = zip <*> tail
`argmax` takes a function and a list, and returns the element of the list for which the given function attains its maximum value:
> argmax :: Ord b => (a -> b) -> [a] -> a
> argmax = maximumBy . on compare