なぜこれが失敗するのですか?
data Value = Num Integer
| Str String
let numberOrString = (liftM Num (try int) <|> liftM Str (many1 (noneOf " "))
parse (numberOrString >> space) "" "123-4 "
>> space
が必要です。それ以外の場合、パーサーは後に停止します123
期待される結果:
parse numberOrString "" "1234"
-> Num 1234
parse numberOrString "" "12-34"
-> Str "12-34"
結果:
parse numberOrString "" "1234-34 "
-> Left (line 1, column 5):
unexpected "-"
expecting digit or space