@@ -0,0 +1,45 @@
1+import qualified Data.ByteString as B
2+import qualified Data.ByteString.Lazy as BL
3+import qualified Data.Text as T
4+import qualified Data.Text.IO as T
5+import qualified Data.Text.Encoding as T
6+import qualified Data.Text.Lazy as TL
7+import qualified Data.Text.Lazy.Encoding as TL
8+import qualified Data.Text.Lazy.IO as TL
9+import qualified Codec.Binary.UTF8.Generic as U8
10+import Control.DeepSeq
11+import System.Environment
12+import System.IO
13+
14+strict h = do
15+ bs <- B.hGetContents h
16+ rnf (T.decodeUtf8 bs) `seq` return ()
17+
18+strict_io h = do
19+ hSetEncoding h utf8
20+ t <- T.hGetContents h
21+ rnf t `seq` return ()
22+
23+lazy h = do
24+ bs <- BL.hGetContents h
25+ rnf (TL.decodeUtf8 bs) `seq` return ()
26+
27+lazy_io h = do
28+ hSetEncoding h utf8
29+ t <- TL.hGetContents h
30+ rnf t `seq` return ()
31+
32+string h = do
33+ hSetEncoding h utf8
34+ t <- hGetContents h
35+ rnf t `seq` return ()
36+
37+main = do
38+ [kind,name] <- getArgs
39+ h <- openFile name ReadMode
40+ case kind of
41+ "strict" -> strict h
42+ "strict_io" -> strict_io h
43+ "lazy" -> lazy h
44+ "lazy_io" -> lazy_io h
45+ "string" -> string h