text: 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
  [hidden email]