@@ -1,3 +1,4 @@
1+{-# LANGUAGE BangPatterns #-}
12-- | Replace a string by another string
23--
34-- Tested in this benchmark:
@@ -12,6 +13,9 @@ import Criterion (Benchmark, bgroup, bench, nf)
1213import qualified Data.ByteString.Char8 as B
1314import qualified Data.ByteString.Lazy as BL
1415import qualified Data.ByteString.Lazy.Search as BL
16+import qualified Data.ByteString.Search as B
17+import qualified Data.Text as T
18+import qualified Data.Text.Encoding as T
1519import qualified Data.Text.Lazy as TL
1620import qualified Data.Text.Lazy.Encoding as TL
1721import qualified Data.Text.Lazy.IO as TL
@@ -20,12 +24,20 @@ benchmark :: FilePath -> String -> String -> IO Benchmark
2024benchmark fp pat sub = do
2125 tl <- TL.readFile fp
2226 bl <- BL.readFile fp
23− return $ bgroup "Replace"
24− [ bench "LazyText" $ nf (TL.length . TL.replace tpat tsub) tl
25− , bench "LazyByteString" $ nf (BL.length . BL.replace bpat bsub) bl
27+ let !t = TL.toStrict tl
28+ !b = T.encodeUtf8 t
29+ return $ bgroup "Replace" [
30+ bench "Text" $ nf (T.length . T.replace tpat tsub) t
31+ , bench "ByteString" $ nf (BL.length . B.replace bpat bsub) b
32+ , bench "LazyText" $ nf (TL.length . TL.replace tlpat tlsub) tl
33+ , bench "LazyByteString" $ nf (BL.length . BL.replace blpat blsub) bl
2634 ]
2735 where
28− tpat = TL.pack pat
29− tsub = TL.pack sub
30− bpat = B.concat $ BL.toChunks $ TL.encodeUtf8 tpat
31− bsub = B.concat $ BL.toChunks $ TL.encodeUtf8 tsub
36+ tpat = T.pack pat
37+ tsub = T.pack sub
38+ tlpat = TL.pack pat
39+ tlsub = TL.pack sub
40+ bpat = T.encodeUtf8 tpat
41+ bsub = T.encodeUtf8 tsub
42+ blpat = B.concat $ BL.toChunks $ TL.encodeUtf8 tlpat
43+ blsub = B.concat $ BL.toChunks $ TL.encodeUtf8 tlsub