Parsecの質問です(2系)
εを含む文法に対するパーサ(optionalやmany等)を<|>でつなぐ際、
εを含む文法のパースは必ず成功するため、
<|>でつながれている別のパーサにマッチしてくれません。
tryも機能しないのですが、どうやってバックトラックさせれば良いのでしょうか?

例えば(["+"] | "-") ...をパースする際、次のパーサだと
((option "" (string "+")) <|> string "-") >> string "1"
+1と1はパース出来ますが-1がパース出来ません
optionの前とstring "+"の前にtryを両方/片方だけはさむ3パターンも同様の結果です
LALR(1)のbisonではうまくいきました
同じくLL系のANTLRは構文木ごとにTreeWalkerなるものを
作らないといけないっぽくてきちんと確認するのはやめましたが
antlrworksでは-を通る図が描かれるので多分動きます
parser : ('+'? | '-') ('0' .. '9');