パフォーマンスを向上させるために、Parsec を使用する機能している Haskell コードを、代わりに Attoparsec を使用するように変換しています。変更を行い、すべてがコンパイルされましたが、パーサーが正しく機能しません。
1 行に 1 つずつ、さまざまなレコード タイプで構成されるファイルを解析しています。レコードまたはコメントを解析するための個々の関数はそれぞれ正しく機能しますが、一連のレコードをコンパイルする関数を作成しようとすると、パーサーはより多くの入力を期待しているため、常に部分的な結果を返します。
これらは、私が試した 2 つの主なバリエーションです。どちらも同じ問題を抱えています。
items :: Parser [Item]
items = sepBy (comment <|> recordType1 <|> recordType2) endOfLine
この 2 番目の例では、行末文字を使用するようにレコード/コメント パーサーを変更しました。
items :: Parser [Item]
items = manyTill (comment <|> recordType1 <|> recordType2) endOfInput
私のアプローチに何か問題がありますか?私が試みていることを達成する他の方法はありますか?