1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
-- Estimate the time difference between creating a breaker.
{-# LANGUAGE OverloadedStrings #-}
import Control.Monad
import qualified Data.Text as T
import Data.Text.IO as T
import Data.Text.ICU.Break as IO
import Data.Text.ICU as ICU
import System.Environment
consume b = go
where
go = do
m <- next b
case m of
Nothing -> return ()
Just _ -> go
manyBreakers (t:ts) = do
b <- IO.breakWord "en" t
consume b
manyBreakers ts
manyBreakers _ = return ()
oneBreaker ts = do
b <- IO.breakWord "en" ""
forM_ ts $ \t -> do
setText b t
consume b
cloneBreakers ts = do
b <- IO.breakWord "en" ""
forM_ ts $ \t -> do
b' <- clone b
setText b' t
consume b'
pureBreaker ts = do
let b = ICU.breakWord "en"
forM_ ts $ \t -> length (breaks b t) `seq` return ()
main = do
(kind:files) <- getArgs
let act = case kind of
"one" -> oneBreaker
"many" -> manyBreakers
"clone" -> cloneBreakers
"pure" -> pureBreaker
forM_ files $ \f -> T.readFile f >>= act . T.lines
|