私は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
、最初のパターンは失敗せず、2番目のパターンと一致するようです。私はある種のエラーを予期していました-多分「非網羅的な警備員」。では、ここで実際に何が起こっているのでしょうか。これが誤って発生した場合に備えて、コンパイラの警告を有効にする方法はありますか?