module Porte.Statistics where import qualified Data.ByteString.Lazy.Char8 as B import qualified Data.Map as M import qualified System.IO as I import Text.Printf(printf) type FrequencyMap = M.Map B.ByteString Int type FieldFrequency = (B.ByteString, Int) mapFrequency :: [B.ByteString] -> FrequencyMap mapFrequency = foldr (\x -> M.insertWith' (+) x 1) M.empty fieldsFrequency f = M.assocs . mapFrequency . concat . map f fieldFrequency f = M.assocs . mapFrequency . map f printFrequency :: FieldFrequency -> IO () printFrequency (a, b) = I.putStr (printf "%5d " b) >> B.putStrLn a