
Is there a bug in the GHC implementation of the popen function that manifests itself when more than 4k is written to the pipe? I'm trying to reproduce in Haskell the standard UNIX shell pipe idiom: cat 4097 | cat where 4097 is a file containing 4097 bytes. My Haskell code looks as follows: -- snip -- import Posix import IO import System main :: IO () main = do sequence_ $ map printChunk chunks printChunk :: String -> IO () printChunk str = do (find_output, _, _) <- popen "cat" [] (Just str) (cat_output, _, _) <- popen "cat" [] (Just find_output) putStrLn cat_output putStrLn $ show (length str) lengths = [4095,4096..] str = repeat 'a' chunks = zipWith take lengths (repeat str) -- end snip -- I get two pieces of output, one for each of the 4095 and 4096 bytes, but nothing for 4097 bytes, the program just hangs. Is this some bizarre feature of lazy evaluation, or a mistake in the way that popen is implemented (or both)? I'm using ghc-5.04.3 on linux 2.4.20-8 (Red Hat 9). Thanks, Mark. _________________________________________________________________ On the move? Get Hotmail on your mobile phone http://www.msn.co.uk/mobile