module Porte.Statistics where
import qualified Data.ByteString.Lazy.Char8 as B
import qualified Porte.Ports                as P
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 (x:xs) = M.insertWith' (+) x 1 $ mapFrequency xs
mapFrequency _ = M.empty

fieldsFrequency f r = M.assocs $ mapFrequency (concat $ map f r)
fieldFrequency f r = M.assocs $ mapFrequency (map f r)

printFrequency :: FieldFrequency -> IO ()
printFrequency (a, b) = I.putStr (printf "%5d " b) >> B.putStrLn a