“尝试”在Parsec中的表现如何?

时间:2014-04-06 00:14:00

标签: haskell parsec

为了弄清楚try在parsec中是如何工作的,我把它放到了ghci中:

λ> parse (try $ string "a") "" "b"
Left (line 1, column 1):
unexpected "b"
expecting "a"

我并不完全确定我的期望,但这不是我所期待的,因为我认为try的全部目的是当预期的事情不存在时不会导致错误。

1 个答案:

答案 0 :(得分:10)

try不会默默地吃错误,但在发生错误时它不会消耗任何令牌(它会重置令牌流,AKA回溯)。错误仍将发生,但您可以继续,就好像解析器根本不使用任何令牌(使用<|>)。