Редактировать:
L. Kolmodin прав: utf8-строка или текст - правильный ответ. Я оставлю свой оригинальный ответ ниже для справки. Похоже, что Google выбрал IConv неправильно. (Эквивалент моей функции-оболочки IConv уже находится в строке utf8 как Codec.Binary.UTF8.String.encodeString
.)
Вот то, что я использовал - возможно, я не помню полное решение, поэтому дайте мне знать, если у вас все еще есть проблемы:
Из Hackage установите IConv . К сожалению, Codec.Text.IConv.convert
работает с байтами, а не со строками. Я предполагаю, что вы можете читать файлы напрямую как строки байтов, но я написал конвертер, так как HaXml использует обычные строки:
import qualified Data.ByteString.Lazy.Char8 as B
utf8FromLatin1 = B.unpack . convert "LATIN1" "UTF-8" . B.pack
Теперь в Mac OS вы должны скомпилировать с
$ ghc -O2 --make -L/usr/lib -L/opt/local/lib Whatever.hs
Поскольку произошел некоторый конфликт библиотек, я думаю, что с MacPorts я должен явно указать на встроенные библиотеки iconv
. Вероятно, есть способ всегда передавать эти флаги -L в ghc, но я еще не посмотрел.