-- | Miscellaneous utility functions for "Data.Vector" module Data.Vector.Generic.Util ( frequencies ) where import Data.Map.Strict (Map) import qualified Data.Map.Strict as M (empty, insertWith) import Data.Vector.Generic (Vector, foldl') -- $setup -- >>> :module + Data.Vector -- | @frequencies xs@ returns a 'Map' from distinct items in @xs@ to -- the number of times they appear. -- -- >>> frequencies $ fromList "bra bra bar" -- fromList [(' ',2),('a',3),('b',3),('r',3)] frequencies :: (Ord a, Vector v a, Num n) => v a -> Map a n frequencies = foldl' (\m k -> M.insertWith (+) k 1 m) M.empty