[Haskell-cafe] hGetContents Illegal byte sequence / ghc-pkg

Brent Yorgey byorgey at seas.upenn.edu
Sat Aug 11 15:53:19 CEST 2012

On Sat, Aug 11, 2012 at 12:13:45PM +0100, Benjamin Edwards wrote:
> Hello café,
> I have a program that is crashing, and I have no idea why:
> module Main
>   where
> import System.Process (readProcessWithExitCode)
> main :: IO ()
> main = do _ <- readProcessWithExitCode "ghc-pkg" ["describe", "hoopl"] ""
>           putStrLn "Should never get here"
> this is using the process package from hackage. The program crashes with
> minimal-test: fd:5: hGetContents: invalid argument (invalid byte sequence)
> minimal-test: thread blocked indefinitely in an MVar operation
> inspecting the source of readProcessWithExitCode yields an obvious
> explanation to the MVar problem, but I don't understand why hGetContents is
> so offended.

The 'invalid argument' error from hGetContents indicates that a wrong
encoding is being assumed.  I don't know enough about how
putStr/hGetContents decide on an encoding, but in any case it works
for me (that is, it prints "Should never get here").  The likely
sticking point is that one of the authors of hoopl, João Dias, has a
name which contains U+00E3: LATIN SMALL LETTER A WITH TILDE.

Try doing  

  ghc-pkg describe hoopl > hoopl.txt
  file hoopl.txt

to get an indication of what encoding is being used, or manually take
a look at the bytes being generated using

  ghc-pkg describe hoopl | hexdump -C

I don't know what the solution is but at least this should give some
additional information.


More information about the Haskell-Cafe mailing list