module Utils.List exposing ( groupBy ) import Dict groupBy : (a -> comparable) -> List a -> List (comparable, List a) groupBy f xs = let addItem item dict = let groupItems = Dict.get (f item) dict |> Maybe.withDefault [] in Dict.insert (f item) (item :: groupItems) dict in List.foldr addItem Dict.empty xs |> Dict.toList