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