text-0.11.1.0: tests/benchmarks/src/Data/Text/Benchmarks/WordCount.hs
-- | A word frequence count program
--
module Data.Text.Benchmarks.WordCount
( benchmark
) where
import Control.Exception (evaluate)
import Criterion (Benchmark, bench)
import Data.List (foldl')
import Data.Map (Map)
import qualified Data.Map as M
import qualified Data.Text as T
import qualified Data.Text.IO as T
benchmark :: FilePath -> IO Benchmark
benchmark fp = return $ bench "WordCount" $ do
t <- T.readFile fp
evaluate $ M.size $ wordCount t
wordCount :: T.Text -> Map T.Text Int
wordCount =
foldl' (\m k -> M.insertWith (+) k 1 m) M.empty . map T.toLower . T.words