Может ли ghc обрабатывать определенные определенные предупреждения как ошибки, а другие - как предупреждения?

Может ли ghc каким-то образом убедиться в том, что некоторые типы предупреждений относятся к ошибкам, а другие - как предупреждения, но все же сообщают о них?

Я надеялся, это было бы возможно с чем-то вроде этого:

ghc -Werror -fwarn-missing-methods -Wwarn -fwarn-missing-signatures

но мне не повезло. (Я думаю, что gcc также не поддерживает это.)

Ответ 1

Нет, это переключатель "все или ничего". Однако вы можете сделать

ghc -Werror -fwarn-missing-methods -fno-warn-missing-signatures

Хотя это заставляет GHC полностью проглатывать предупреждение, что может и не быть тем, что вы хотели.

Ответ 2

Обратите внимание, что, начиная с GHC 8.2.1, эта функция существует! Он был описан Trac ticket # 11219, и теперь вы можете сделать ghc -Werror=missing-methods -Wmissing-signatures!

Ответ 3

Если это вызывает большую озабоченность, вы можете рассмотреть возможность включения и отключения предупреждений для каждого модуля. Так что в некоторых модулях у вас будет:

 {-# OPTIONS_GHC -Wall -Werror #-}

здесь обо всем, а в других:

 {-# OPTIONS_GHC -w -Werror -fwarn-missing-methods #-}

чтобы включить только некоторые вещи в качестве ошибок.