
On Wed, Dec 09, 2020 at 09:23:34PM -0500, David Feuer wrote:
Yeah, I think you're missing something. -Wall is great for checking code that's supposed to be "production ready", but it makes some pretty annoying noise when you're deep in development. Probably the most annoying in that context are unused binding warnings (yeah, I'm not using it yet because I'm still writing it and/or other helpers), unused variable warnings (yeah, that'll be used in some case I still need to write), and unused imports (yeah, I've temporarily commented out the code that uses Foo, and I'm pretty sure I'll be needing Bar before I'm done). In that setting, I'm much more likely to want -Wincomplete-patterns (what do I still need to write) and maybe -Wname-shadowing (so I won't have to go back and change a bunch of names later) than full -Wall.
But since the proposal is about *defaults*, and a hypothetical *default* "-Wall" can be explicitly disabled: $ ghci -Wall λ> foo :: Bool -> Int ; foo True = 1 <interactive>:1:22: warning: [-Wincomplete-patterns] Pattern match(es) are non-exhaustive In an equation for ‘foo’: Patterns not matched: False λ> Leaving GHCi. --- $ ghci -Wall -Wno-all λ> foo :: Bool -> Int ; foo True = 1 λ> Leaving GHCi. the objections you raised don't necessarily rule the proposed default, one would just need choose to use "-Wno-all" initially, and then later turn it off. A more serious compatibility break would perhaps happen when one specifies "-Werror", perhaps in combination with specific warnings to enforce: $ ghci -Wall -Werror -Wno-all λ> 1 + 2 3 λ> foo :: Bool -> Int ; foo True = 1 λ> Leaving GHCi. --- $ ghci -Wall -Werror λ> foo :: Bool -> Int ; foo True = 1 <interactive>:1:22: error: [-Wincomplete-patterns, -Werror=incomplete-patterns] Pattern match(es) are non-exhaustive In an equation for ‘foo’: Patterns not matched: False λ> 1 + 2 <interactive>:2:1: error: [-Wtype-defaults, -Werror=type-defaults] • Defaulting the following constraints to type ‘Integer’ (Show a0) arising from a use of ‘print’ at <interactive>:2:1-5 (Num a0) arising from a use of ‘it’ at <interactive>:2:1-5 • In a stmt of an interactive GHCi command: print it λ> Leaving GHCi. Here, adding an implicit "-Wall" stops code from compiling. So backwards-compatible behaviour might require "-Wall" to be explicit when "-Werror" is specified. Since my examples are using "ghci", I should note that for me, in "ghci", I typically want no warnings, and "-Wall" would be a bit of a nuisance. But I can always alias (bash): ghci() { command ghci -v0 -Wno-all "$@"; } And then no longer see the mostly pedantic "defaulting" warnings, or whatever else gets in the way of quickly syntax-checking or evaluating an expression. -- Viktor.