@@ -1,9 +1,55 @@
11{-# LANGUAGE OverloadedStrings #-}
2−import Data.Text as T
3−import Data.ByteString as B
4−import Data.Text.Encoding as T
2+import qualified Data.ByteString as B
3+import qualified Data.ByteString.Lazy as BL
4+import qualified Data.Text as T
5+import qualified Data.Text.IO as T
6+import qualified Data.Text.Encoding as T
7+import qualified Data.Text.Lazy as TL
8+import qualified Data.Text.Lazy.Encoding as TL
9+import qualified Data.Text.Lazy.IO as TL
10+import qualified Codec.Binary.UTF8.Generic as U8
11+import System.Environment
12+import System.IO
513
6−main = do
7− let k = 50000000
8− t = T.replicate k "a"
14+strict_bytestring k s = do
15+ let t = T.replicate k (T.pack s)
916 B.putStr (T.encodeUtf8 t)
17+
18+lazy_bytestring k s = do
19+ let t = TL.replicate (fromIntegral k) (TL.pack s)
20+ BL.putStr (TL.encodeUtf8 t)
21+
22+strict_io k s = do
23+ let t = T.replicate k (T.pack s)
24+ hSetEncoding stdout utf8
25+ T.putStr t
26+
27+lazy_io k s = do
28+ let t = TL.replicate (fromIntegral k) (TL.pack s)
29+ hSetEncoding stdout utf8
30+ TL.putStr t
31+
32+string k s = do
33+ let t = concat $ replicate k s
34+ hSetEncoding stdout utf8
35+ putStr t
36+
37+lazy_string_utf8 k s = do
38+ let t = concat $ replicate k s
39+ BL.putStr (U8.fromString t)
40+
41+strict_string_utf8 k s = do
42+ let t = concat $ replicate k s
43+ B.putStr (U8.fromString t)
44+
45+main = do
46+ [kind,str,kstr] <- getArgs
47+ let k = read kstr * 1000000
48+ case kind of
49+ "strict" -> strict_bytestring k str
50+ "lazy" -> lazy_bytestring k str
51+ "strict_io" -> strict_io k str
52+ "lazy_io" -> lazy_io k str
53+ "string" -> string k str
54+ "lazy_string_utf8" -> lazy_string_utf8 k str
55+ "strict_string_utf8" -> strict_string_utf8 k str