2010-09-29 40 views
2

嗨 我正面臨以下問題,我不得不重新編寫一段代碼以改善他的表現。舊版本使用如下定義的解析器:解析器爲Haskell中的Data.ByteString.Lazy.Char8?

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

解析文件中的行。但速度太慢,需要大量內存來實現線路計算。爲了改進代碼,我決定使用Data.ByteString.Lazy.Char8而不是String,但是我不知道如何處理解析器,是否可以用這種方式定義解析器?

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

或者,是否有任何解析器包專門用於這類工作?

感謝回覆

回答

3

attoparsecParsec 3都有針對懶字節串接口。

(當然,也可以定義在這樣一個分析器,但我想你的意思

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