快速解析haskell中的大型utf-8文本文件

Sea*_*ess 4 parsing haskell utf-8

我有一个300MB的文件(链接),其中包含utf-8字符.我想写一个相当于的haskell程序:

cat bigfile.txt | grep "^en " | wc -l
Run Code Online (Sandbox Code Playgroud)

这在我的系统上以2.6s运行.

现在,我正在将该文件作为普通字符串(readFile)读取,并具有:

main = do
    contents <- readFile "bigfile.txt"
    putStrLn $ show $ length $ lines contents
Run Code Online (Sandbox Code Playgroud)

几秒钟后,我收到此错误:

Dictionary.hs: bigfile.txt: hGetContents: invalid argument (Illegal byte sequence)
Run Code Online (Sandbox Code Playgroud)

我想我需要使用更友好的utf-8?如何快速兼容utf-8?我读到了Data.ByteString.Lazy的速度,但Real World Haskell说它不支持utf-8.

rol*_*gin 7

utf8-string支持读写UTF8字符串.它重用了ByteString基础设施,因此界面可能非常相似.

另一个可能与上述相关的Unicode字符串项目也受到ByteStrings的启发,在本硕士论文中进行了讨论.