Haskell中Data.ByteString.Lazy.Char8的解析器?

时间:2010-09-29 13:47:31

标签: parsing haskell bytestring

您好 我面临以下问题,我必须重新编写一个存在的代码来改善他的表现。旧版本使用了这样定义的解析器:

newtype Parser Char a = Parser {runParser :: [Char] -> [(a,[Char])]}

解析文件中的行。但它太慢了,需要大量的内存来实现线上的计算。为了改进该代码,我决定使用Data.ByteString.Lazy.Char8而不是String,但我不知道如何处理解析器,是否有可能以这种方式定义解析器?

newtype Parser Char a = parser {runParser :: ByteString -> [(a,ByteString)]} ?

或者,是否有任何解析器包专门用于这类工作?

感谢回复

1 个答案:

答案 0 :(得分:3)

attoparsecParsec 3都有以lazy ByteStrings为目标的接口。

(当然,可以用这种方式定义解析器,但我认为你的意思是

newtype Parser a = Parser {runParser :: ByteString -> [(a,ByteString)]}