我正在尝试this tutorial中给出的以下示例。
我无法理解案件'c'
和_
的案件如何不使用on
?
我将代码修改为给定的here,但是当我运行它时,我收到错误“非详尽的模式”:
*StateGame> main "accaaaa"
*** Exception: state1.hs:(27,5)-(31,36): Non-exhaustive patterns in case
为什么会这样?
答案 0 :(得分:6)
案例保护是一个布尔表达式,在成功匹配相应的模式后进行检查。如果它的计算结果为True
,则选择该分支。否则,Haskell将继续从上到下尝试每个案例。
在您的示例中,所有案例都有保护表达式on
:
case x of
'a' | on -> ...
'b' | on -> ...
'c' | on -> ...
_ | on -> ...
因此,当on
为False
时,不能选择任何分支,因此您会得到“非详尽无遗的模式”异常。