【发布时间】:2011-10-29 20:55:46
【问题描述】:
我在 Haskell 中有这个功能:
test :: (Eq a) => a -> a -> Maybe a
test a b
| a == b = Just a
test _ _ = Nothing
这是我尝试使用不同输入的函数时得到的结果:
ghci>test 3 4
Nothing
ghci>test 3 3
Just 3
根据 Real World Haskell 的说法,第一个模式是无可辩驳的。但似乎test 3 4 没有失败第一个模式,而是匹配第二个。我预计会出现某种错误——也许是“非详尽的守卫”。那么这里到底发生了什么,有没有办法在这种意外发生时启用编译器警告?
【问题讨论】:
标签: haskell pattern-matching guard