У меня есть файл размером 300 МБ ( ссылка ) с символами utf-8. Я хочу написать программу на Haskell, эквивалентную:
cat bigfile.txt | grep "^en " | wc -l
Это работает в 2.6s в моей системе.
Прямо сейчас я читаю файл как обычную строку (readFile), и у меня есть это:
main = do
contents <- readFile "bigfile.txt"
putStrLn $ show $ length $ lines contents
Через пару секунд я получаю эту ошибку:
Dictionary.hs: bigfile.txt: hGetContents: invalid argument (Illegal byte sequence)
Полагаю, мне нужно использовать что-то более дружественное к utf-8? Как я могу сделать это как быстро, так и UTF-8 совместимым? Я читал о Data.ByteString.Lazy для скорости, но Real World Haskell говорит, что он не поддерживает utf-8.