
Hello, I am curious about reason why in GHC hIsEOF blocks in BlockBuffering mode while hGetChar doesn't. I wrote following three programs for an experiment. -- echo0.hs module Main where import System.IO main = hSetBuffering stdin (BlockBuffering (Just 5)) >> echo echo = getChar >>= putChar >> hFlush stdout >> echo -- echo1.hs module Main where import System.IO main = hSetBuffering stdin (BlockBuffering (Just 5)) >> echo echo = do eof <- isEOF if eof then return () else getChar >>= putChar >> hFlush stdout >> echo -- as.hs module Main where import System.IO import Control.Concurrent main = putChar 'a' >> hFlush stdour >> threadDelay 1000000 >> main And run next two commandlines % runghc as.hs | runghc echo0.hs % runghc as.hs | runghc echo1.hs I had expected that the both behaviors were same; a character was output a second. But the former output a character a second, and the latter output 5 characters a time every 5 seconds. Are there any explanations ? Best regards. -- Nobuo Yamashita