パイプにEOFを出れば,その時点で全部出力されるのかなぁ.

% cat tst.hs
module Main where
import System.IO
main = do eof <- hIsEOF stdin
          if eof 
             then putStrLn
             else getChar >>= putChar >> hFlush stdout >> main

% cat foo.hs
module Main where
import Data.Char
import System.IO
import Control.Concurrent
main = line 0
line n = putChar (chr (ord 'a' + n)) >> hFlush stdout >> threadDelay 1000000 
         >> if n < 10 then line (n+1) else return ()

これで,
% ghc --make tst.hs -o tst
% ghc --make foo.hs -o foo
とコンパイルして

% ./foo | ./tst

とやると 10秒ほどしてから

aaaaaaaaaa

が出力されますねぇ.ううむ.
ghc の hIsEOF のバグじゃなかろうか...

--nobsun


       

--
ML: haskell-jp / quickml.com
使い方: http://QuickML.com/