为了弄清楚try
在parsec中是如何工作的,我把它放到了ghci中:
λ> parse (try $ string "a") "" "b"
Left (line 1, column 1):
unexpected "b"
expecting "a"
我并不完全确定我的期望,但这不是我所期待的,因为我认为try
的全部目的是当预期的事情不存在时不会导致错误。
答案 0 :(得分:10)
try
不会默默地吃错误,但在发生错误时它不会消耗任何令牌(它会重置令牌流,AKA回溯)。错误仍将发生,但您可以继续,就好像解析器根本不使用任何令牌(使用<|>
)。