嗨 我面临以下问题,我必须重新编写现有代码以提高他的性能。旧版本使用如下定义的解析器:
newtype Parser Char a = Parser {runParser :: [Char] -> [(a,[Char])]}
解析文件中的行。但它太慢并且需要大量内存才能实现在线计算。为了改进该代码,我决定使用 Data.ByteString.Lazy.Char8 而不是 String,但我不知道如何处理解析器,是否可以通过这种方式定义解析器?
newtype Parser Char a = parser {runParser :: ByteString -> [(a,ByteString)]} ?
或者,是否有专门用于此类工作的解析器包?
感谢回复
最佳答案
attoparsec和 Parsec 3两者都有针对惰性字节字符串的接口(interface)。
(当然,可以用这种方式定义解析器,但我认为你的意思是
newtype Parser a = Parser {runParser :: ByteString -> [(a,ByteString)]}
)
关于parsing - Haskell 中 Data.ByteString.Lazy.Char8 的解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3822210/