
Hi all, I'm quite new to Haskell. While following the "Real World Haskell" and doing some experimentation I came up with a anoying situation: Trying to read data from stdin it seems that binary data is not allowed. A simple "copy" program: -- file: copy.hs import System.IO main = do input <- hGetContents stdin hPutStr input Fails when I run it like: $ ghc copy.hs $ ./copy < input > output copy: <stdin>: hGetContents: invalid argument (invalid byte sequence) input contains binary data. In fact of all the following programs only the first works with binary data: copy:: IO () copy = do bracket (openBinaryFile "input" ReadMode) hClose $ \hi -> do bracket (openBinaryFile "ouput" WriteMode) hClose $ \ho -> do input <- hGetContents hi hPutStr ho input copy2:: IO () copy2 = do -- Doesn't work with binary files source <- readFile "input" writeFile "output" source copy3:: IO () copy3 = do -- Doesn't work with binary files either interact (map $ \x -> x) copy4:: IO () copy4 = do input <- hGetContents stdin hPutStr stdout input But I lost any chance of piping and/or using '<', '>' in the shell. Best regards, Manuel.