Ответ 1
По умолчанию файлы читаются в локали системы, поэтому, если у вас есть файл с использованием нестандартного кодирования, вам нужно установить кодировку дескриптора файла самостоятельно.
foo = do
handle <- openFile "file.html" ReadMode
hSetEncoding handle utf8_bom
contents <- hGetContents handle
doSomethingWithContents
hClose handle
должно начаться. Обратите внимание, что это не содержит обработки ошибок, тем лучше будет
import Control.Exception -- for bracket
foo = bracket
(openFile "file.html" ReadMode >>= \h -> hSetEncoding h utf8_bom >> return h)
hClose
(\h -> hGetContents h >>= doSomething)
или
foo = withFile "file.html" ReadMode $
\h -> do hSetEncoding h utf8_bom
contents <- hGetContents h
doSomethingWith contents