何らかのカスタムタイプの解析エラーを何とか取得できますか?たとえば、エラーからコンテキストを解析することについてのより多くの情報を得ることはクールです。そして、テキストメッセージの形でエラー情報を持つのはあまり便利ではないようです。Parsecとカスタム解析エラータイプ
10
A
答えて
8
Rhymoidが観察するように、残念ながら、直接には不可能です。あなた自身のEither
様モナドでParsec
を組み合わせる
も、助けにはなりません - それは(オーバーEitherT
)をあまりにも早く(Either
オーバー)を終了するか、遅すぎます。
もしあなたがそれを悪くしたいなら、あなたはをState (SourcePos, YourErrorType)
以上に使ってください。
構造化されたエラー値を出力するたびに、現在の場所の状態で記録しますが、はの場合のみ(これはエラーが返されるため、Parsecのユーザー状態は使用できません)現在の場所はすでに記録されている場所よりも遠いです。 (場所が同じであれば、何とかエラーをマージすることができます)
最後に、モナドスタックを実行すると、 SourcePos
。 2つの場所が一致していることを確認してください。そうでない場合(つまり、ParsecのSourcePos
が遠い場合)、このエラーのエラー値はありません。
関連する問題
これは可能ではないようです。 ['Text.Parsec.Error'](http://hackage.haskell.org/packages/archive/parsec/3.1.1/doc/html/Text-Parsec-Error.html)は、あらゆる種類のエラーレスポンスは最終的に 'String'であり、['(>) '](http://hackage.haskell.org/packages/archive/parsec/3.1.1/doc/html/Text-Parsec-Prim.html #v:-60--63--62-)演算子は文字列のみをとります。 –
注意点:エラー出力は「単なるテキストメッセージ」ではありません。これにはソースの位置と、次にパーサーが期待していた情報などが含まれています。しかし、はい、時にはそれ以上を得ることはいいです... – MathematicalOrchid