26 lines
665 B
Haskell
26 lines
665 B
Haskell
import Control.Concurrent (threadDelay)
|
|
import Control.Monad (when)
|
|
import System.IO (hFlush, stdout)
|
|
import System.Posix
|
|
|
|
-- If the file descriptor is associated with a terminal, then flush its input,
|
|
-- otherwise do nothing.
|
|
termFlush :: Fd -> IO ()
|
|
termFlush fd = do
|
|
isTerm <- queryTerminal fd
|
|
when isTerm $ discardData fd InputQueue
|
|
|
|
main :: IO ()
|
|
main = do
|
|
putStrLn "Type some stuff...\n"
|
|
threadDelay $ 3 * 1000000
|
|
putStrLn "\n\nOk, stop typing!\n"
|
|
threadDelay $ 2 * 1000000
|
|
|
|
termFlush stdInput
|
|
|
|
putStr "\n\nType a line of text, ending with a newline: "
|
|
hFlush stdout
|
|
line <- getLine
|
|
putStrLn $ "You typed: " ++ line
|
|
termFlush stdInput
|