@@ -1,9 +1,55 @@
1{-# LANGUAGE OverloadedStrings #-}
1{-# LANGUAGE OverloadedStrings #-}
3−import Data.ByteString as B
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
4−import Data.Text.Encoding 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
6−main = do
14+strict_bytestring k s = do
8− t = T.replicate k "a"
15+ let t = T.replicate k (T.pack s)
9 B.putStr (T.encodeUtf8 t)
16 B.putStr (T.encodeUtf8 t)
18+lazy_bytestring k s = do
19+ let t = TL.replicate (fromIntegral k) (TL.pack s)
20+ BL.putStr (TL.encodeUtf8 t)
23+ let t = T.replicate k (T.pack s)
24+ hSetEncoding stdout utf8
28+ let t = TL.replicate (fromIntegral k) (TL.pack s)
29+ hSetEncoding stdout utf8
33+ let t = concat $ replicate k s
34+ hSetEncoding stdout utf8
37+lazy_string_utf8 k s = do
38+ let t = concat $ replicate k s
39+ BL.putStr (U8.fromString t)
41+strict_string_utf8 k s = do
42+ let t = concat $ replicate k s
43+ B.putStr (U8.fromString t)
46+ [kind,str,kstr] <- getArgs
47+ let k = read kstr * 1000000
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