¿Cómo decide GHC / Haskell qué codificación de caracteres va a decodificar / codificar de / a?

arece que GHC es al menos inconsistente en la codificación de caracteres desde la que decide decodificar.

Considere un archivo,omatase-shimashita.txt, con el siguiente contenido, codificado en UTF-8: お 待 た せ し ま し た

readFile parece leer esto correctamente ...

Prelude> content <- readFile "/home/chris/Desktop/omatase-shimashita.txt"
Prelude> length content
8
Prelude> putStrLn content
お待たせしました

Sin embargo, si escribo un servidor "echo" simple, no se decodifica con un valor predeterminado de UTF-8. Considere el siguiente código que maneja un cliente entrante:

handleClient handle = do
  line <- hGetLine handle
  putStrLn $ "Read following line: " ++ toString line
  handleClient handle

Y el código de cliente relevante, enviando explícitamente UTF-8:

Data.ByteString.hPutStrLn handle $ Codec.Binary.UTF8.Generic.fromString "お待たせしました"

¿Es este comportamiento no inconsistente? ¿Hay algún método para esta locura? Estoy planeando reescribir mis aplicaciones para usar explícitamenteByteString objetos y codificar y decodificar explícitamente usandoCodec.Binary.UTF8, pero sería bueno saber qué está pasando aquí de todos modos ...: o /

UPDATE: estoy ejecutando Ubuntu Linux, versión 10.10, con una configuración regional en_US.UTF-8 ...

$ cat /etc/default/locale 
LANG="en_US.UTF-8"
$ echo $LANG 
en_US.UTF-8

Respuestas a la pregunta(2)

Su respuesta a la pregunta