Comment detail

出力の一時停止と再開 (Nested Flatten)
ghc-6.8.2 の System.Timeout を使ってみた
標準入出力をNoBufferingモードで使う
ユーザキー入力はechoしないようにする
Windowsで動くかどうかは未確認
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
module Main where
import System.IO
import System.Posix
import System.Timeout

main :: IO ()
main =  do { hSetBuffering stdin NoBuffering
           ; hSetBuffering stdout NoBuffering
           ; at <- getTerminalAttributes stdInput
           ; setTerminalAttributes stdInput (withoutMode at EnableEcho) Immediately
           ; loop False
           }

loop :: Bool -> IO ()
loop False = do {
 ; mc <- timeout (10^6) (hGetChar stdin)
 ; case mc of
     Nothing  -> hPutChar stdout 'a' >> loop False
     Just 'p' -> loop True
     Just 'q' -> return ()
     Just _   -> loop False
 }
loop True = do {
 ; c <- hGetChar stdin
 ; case c of
     'p' -> loop False
     'q' -> return ()
     _   -> loop True
 }

Index

Feed

Other

Link

Pathtraq

loading...