Могу ли я сделать -Wincomplete-шаблоны более строгими? - PullRequest
0 голосов
/ 30 декабря 2018

С помощью 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 или тому подобное.

Конечно, для полноты и потомства ответы, относящиеся к другим компиляторамтакже высоко ценятся.

1 Ответ

0 голосов
/ 30 декабря 2018

Кажется, что -Wincomplete-uni-patterns - это то, что вам нужно.Как человек, который использует -Wall в основном все время, я нахожу тот факт, что эти случаи не охватываются -Wall или -Wincomplete-patterns удивительными и плохими.

РЕДАКТИРОВАТЬ : Этопоявляется предложение GHC добавить это к -Wall было принято.Я не уверен, статус (я проверил на 8.4): https://github.com/ghc-proposals/ghc-proposals/pull/71

...