我有一个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
没有失败第一个模式,而是匹配了第二个模式。我期望会出现某种错误——也许是“非详尽保护”。所以这里到底发生了什么,有没有办法在这种情况下启用编译器警告?
otherwise
是特殊的。如果您尝试自己定义它,您将会得到不全面匹配的编译时警告(当然,前提是您启用了这些警告)。 - Rotsor