module Util ( groupBy ) where import Control.Arrow ((&&&)) import Data.Function (on) import qualified Data.List as L groupBy :: Ord b => (a -> b) -> [a] -> [(b, [a])] groupBy f = map (f . head &&& id) . L.groupBy ((==) `on` f) . L.sortBy (compare `on` f)