1 -- !!! Reconfiguring the buffering of a handle
2 module Main(main) where
6 queryBuffering :: String -> Handle -> IO ()
7 queryBuffering handle_nm handle = do
8 bufm <- hGetBuffering handle
9 putStrLn ("Buffering for " ++ handle_nm ++ " is: " ++ show bufm)
12 queryBuffering "stdin" stdin
13 queryBuffering "stdout" stdout
14 queryBuffering "stderr" stderr
16 -- twiddling the setting for stdin.
17 hSetBuffering stdin NoBuffering
18 queryBuffering "stdin" stdin
19 hSetBuffering stdin LineBuffering
20 queryBuffering "stdin" stdin
21 hSetBuffering stdin (BlockBuffering (Just 2))
22 queryBuffering "stdin" stdin
23 hSetBuffering stdin (BlockBuffering Nothing)
24 queryBuffering "stdin" stdin
25 let bmo = BlockBuffering (Just (-3))
26 hSetBuffering stdin bmo `catch` \ _ -> putStrLn ("Caught illegal op: hSetBuffering stdin " ++ showParen True (showsPrec 9 bmo) [])
30 -- twiddling the buffering for stdout
31 hPutStr stdout "Hello stdout 1"
32 hSetBuffering stdout NoBuffering
33 queryBuffering "stdout" stdout
34 hPutStr stdout "Hello stdout 2"
35 hSetBuffering stdout LineBuffering
36 queryBuffering "stdout" stdout
37 hPutStr stdout "Hello stdout 3"
38 hSetBuffering stdout (BlockBuffering (Just 2))
39 queryBuffering "stdout" stdout
40 hPutStr stdout "Hello stdout 4"
41 hSetBuffering stdout (BlockBuffering Nothing)
42 queryBuffering "stdout" stdout
43 hPutStr stdout "Hello stdout 5"
44 let bmo = BlockBuffering (Just (-3))
45 hSetBuffering stdout bmo `catch` \ _ -> putStrLn ("Caught illegal op: hSetBuffering stdout " ++ showParen True (showsPrec 9 bmo) [])
49 -- twiddling the buffering for stderr
50 hPutStr stderr "Hello stderr 1"
51 hSetBuffering stderr NoBuffering
52 queryBuffering "stderr" stderr
53 hPutStr stderr "Hello stderr 2"
54 hSetBuffering stderr LineBuffering
55 queryBuffering "stderr" stderr
56 hPutStr stderr "Hello stderr 3"
57 hSetBuffering stderr (BlockBuffering (Just 2))
58 queryBuffering "stderr" stderr
59 hPutStr stderr "Hello stderr 4"
60 hSetBuffering stderr (BlockBuffering Nothing)
61 queryBuffering "stderr" stderr
62 hPutStr stderr "Hello stderr 5"
63 let bmo = BlockBuffering (Just (-3))
64 hSetBuffering stderr bmo `catch` \ _ -> putStrLn ("Caught illegal op: hSetBuffering stderr " ++ showParen True (showsPrec 9 bmo) [])
66 ls <- hGetContents stdin
68 hSetBuffering stdin NoBuffering
72 putLine :: String -> IO String
73 putLine [] = return []