С помощью GHC я могу включить -Wincomplete-patterns
для выявления вероятных ошибочных ситуаций, подобных этим двум.
problem1 :: Either Int String -> Int
problem1 (Left x) = x
problem2 :: Either Int String -> Int
problem2 x = case x of
Left x' -> x'
Очевидно, я забыл обработать случай Right
в обеих этих функциях, иGHC скажет мне это.Тем не менее, компилятор, кажется, отпустил меня без предупреждения даже в этих двух случаях.
problem3 :: Either Int String -> Int
problem3 x = let Left x' = x in x'
problem4 :: Either Int String -> Int
problem4 = \(Left x) -> x
Я все еще забыл разобрать дело, но GHC, похоже, не беспокоит.Есть ли флаг компилятора, который я могу установить, чтобы перехватывать ситуации, подобные этой, где я использую let
или лямбда-сопоставление с образцом, но не обрабатывал все случаи?В идеале, я хочу получить предупреждение, если я сделаю что-то подобное, чтобы я мог преобразовать его в оператор case
или тому подобное.
Конечно, для полноты и потомства ответы, относящиеся к другим компиляторамтакже высоко ценятся.