В документации для Data.ByteString.hGetContents говорится
Как и в случае с hGet, предполагается, что строковое представление в файле соответствует стандарту ISO-8859-1.
Почему он должен что-то «предполагать» о «представлении строки в файле»? Данные вовсе не обязательно являются строками или закодированным текстом. Если бы я хотел иметь дело с закодированным текстом, я бы использовал Data.Text или, возможно, Data.ByteString.Char8. Я думал, что весь смысл ByteString в том, что данные обрабатываются как список 8-битных байтов, а не как текстовые символы. Каково влияние предположения, что это ISO-8859-1?
ByteString
задумывался как более быстрыйString
. С тех пор мы усвоили урок — у нас есть реальные типы, которые действительно быстрееString
s, аByteString
— только для последовательностей байтов. Но так было не всегда. - person Daniel Wagner   schedule 05.11.2013