Runtime error while feeding a binary to stdin

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.

Those System.IO functions *are* String-specific. Try the equivalents from
Data.ByteString:
http://hackage.haskell.org/package/bytestring-0.10.8.1/docs/Data-ByteString....
On Tue, Jan 10, 2017 at 2:46 PM, Manuel Vázquez Acosta
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. _______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners

Theodore Lief Gannon
Those System.IO functions *are* String-specific. Try the equivalents from Data.ByteString:
http://hackage.haskell.org/package/bytestring-0.10.8.1/docs/Data-ByteString....
On Tue, Jan 10, 2017 at 2:46 PM, Manuel Vázquez Acosta
wrote: 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. _______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
_______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
participants (3)
-
Manuel
-
Manuel Vázquez Acosta
-
Theodore Lief Gannon