[Haskell-beginners] Runtime error while feeding a binary to stdin

Theodore Lief Gannon tanuki at gmail.com
Wed Jan 11 02:30:36 UTC 2017


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.html#g:29

On Tue, Jan 10, 2017 at 2:46 PM, Manuel Vázquez Acosta <mva.led at gmail.com>
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 at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20170110/d1973054/attachment.html>


More information about the Beginners mailing list