2

こんにちは、私は次の問題に直面しています。彼のパフォーマンスを向上させるために、既存のコードを書き直さなければなりません。古いバージョンは、次のように定義されたパーサーを使用していました。

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

ファイルから行を解析します。しかし、それは遅すぎて、行ごとに計算を行うには大量のメモリが必要でした。そのコードを改善するために、String の代わりに Data.ByteString.Lazy.Char8 を使用することにしましたが、パーサーの処理方法がわかりません。この方法でパーサーを定義することは可能ですか?

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

または、これらの種類の作業専用のパーサー パッケージはありますか?

返信ありがとう

4

1 に答える 1

3

attoparsecParsec3はどちらも、遅延ByteStringを対象とするインターフェースを備えています。

(もちろん、そのようにパーサーを定義することは可能ですが、私はあなたが意味すると思います

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

)。

于 2010-09-29T14:11:55.200 に答える