module Utils.List exposing ( groupBy , mean ) 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 mean : List Int -> Int mean xs = (List.sum xs) // (List.length xs)