ReadPパッケージの対称選択(+++)演算子に問題があります。Text.ParserCombinators.ReadP(Haskell)で(+++)演算子の動作
https://www.haskell.org/cabal/release/cabal-1.22.8.0/doc/API/Cabal/Distribution-Compat-ReadP.html
私はちょうどいくつかのことをしようとしてきたインターネット上のREADP libに多くの例を見つけることができないので。
私は偏った選択が期待通りに機能することに気付きました。左側をパースすることを好んで、失敗した場合は正しいパーザを選択します。
fmap Just (munch1 dianaFloat) <++ return Nothing
私は、対称な選択演算子を挿入した場合。アルゴリズムは終了しません。
fpail) <++ return Nothing
==
fpail) +++ return Nothing
は、だから私の質問は、どのような使用はされています。私は左側を聞かせている場合
fmap Just (munch1 dianaFloat) +++ return Nothing
、どちらも同じ結果をもたらす失敗(+++)演算子は、両方が解析に成功したときに終了しないように見えます。
ところで、ソースはベースで見つけることができます。 https://hackage.haskell.org/package/base-4.10.0.0/docs/Text-ParserCombinators-ReadP.html –
無終了を再現することはできません。 ''( '' Nothing、 "c")、(単に "c"、 "") ''を生成します。 –
うーん..あなたの小さな例では、それは選択しませんが、両方の結果を返すだけです。大きなファイルでは、私は解析していますが、何も起こりません。 – ritchie46