Haskell:函数非穷尽模式问题及x0在函数f中匹配失败原因
Haskell非穷尽模式匹配异常排查(x0无法匹配问题)
Haskell要求函数的所有模式分支必须覆盖全部合法输入值,只要存在输入未被任何分支匹配,运行时就会抛出非穷尽模式异常。x0无法在函数f中完成匹配的常见原因如下:
- 函数f的模式分支没有覆盖x0所属的类型构造子场景。例如你定义的输入类型为
data Example = C1 Int | C2 String,但f只写了f (C1 n) = ...分支,未写C2对应的分支,当x0是C2构造的值时就会匹配失败。 - 模式分支添加了不必要的定值约束,例如你写了
f 0 = ...; f 1 = ...,但x0的实际值为2,没有对应的匹配分支。 - 处理递归结构时遗漏了基础分支,例如处理列表时只写了
f (x:xs) = ...没有写f [] = ...,当x0是空列表时就会触发异常。
建议编译时开启
-Wall参数,编译器会提前识别非穷尽模式隐患,输出遗漏分支的警告信息,无需等到运行时再排查。
内容的提问来源于stack exchange,提问作者123
相关产品推荐
相关产品推荐

