Parsec选项可能总是消耗输入

时间:2016-10-28 09:48:56

标签: haskell parsec

我试图调试为什么尽管将optionMaybetry结合使用,但是parsec正在消耗输入。基本上在下面的代码中,为什么第二次运行不返回Right "abc"(这是我期望的)?

鉴于

myParser = do
    optionMaybe $ try (between (char '/') (char '/') $ many1 (noneOf "/")
    many1 (noneOf "/")

我得到了

> parse myParser "" "/abc/def"
Right "def"

> parse myParser "" "/abc"
Left (line 1, column 5):
unexpected end of input
expecting "/"

1 个答案:

答案 0 :(得分:3)

由于between (char '/') (char '/') $ many1 (noneOf "/")中缺少结束'/',整个"/abc"失败,因此optionMaybe $ try $ between ...不会消耗任何内容(并导致Nothing )。您留下了输入的所有"/abc",这当然与剩余的解析器many1 (noneOf "/")不匹配。