use*_*560 1 haskell case guard
我正在尝试本教程中给出的以下示例.
我无法理解的是案件是如何保护案件'c'而_根本不使用的on?
我修改了这里给出的代码,但是当我运行它时,我得到错误"非详尽的模式以防万一":
*StateGame> main "accaaaa"
*** Exception: state1.hs:(27,5)-(31,36): Non-exhaustive patterns in case
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
案例保护是一个布尔表达式,在成功匹配相应的模式后进行检查.如果评估为True,则选择该分支.否则,Haskell将继续从上到下尝试每个案例.
在您的示例中,所有案例都具有保护表达式on:
case x of
'a' | on -> ...
'b' | on -> ...
'c' | on -> ...
_ | on -> ...
Run Code Online (Sandbox Code Playgroud)
因此,当on是False,没有一个分支可以选择,所以你得到一个"的情况下,非详尽模式"的异常.