Extend -Wall
with incomplete-uni-patterns
and incomplete-record-updates
¶
Extend -Wall
with incomplete-uni-patterns
and incomplete-record-updates
because they warn only about things that should typically not occur in well-written
modern Haskell.
Motivation¶
-Wall
does not warn on the following, but -Wincomplete-uni-patterns
does
myHead :: [a] -> a
myHead = \(a:as) -> a
-Wall
does not warn on the following, but -Wincomplete-record-updates
does
data Foo
= Bar { barInt :: Int, barString :: String }
| Baz
mySetter :: Int -> Foo -> Foo
mySetter int foo = foo { barInt = int }
These code samples are in a style which is generally discouraged in modern Haskell
and I suspect the vast majority of developers would want to be warned about these
issues as standard. -Wall
seems like a good standard place in which to apply
them.
Historically, incomplete-uni-patterns
seems to have been kept out of -Wall
by https://gitlab.haskell.org/ghc/ghc/issues/4905. It received no discussion nor
counterpoints. Moreover, the change was made 6 years ago and standards for Haskell
code in the wild have tightened somewhat since then.
I made this suggestion on Haskell Reddit and it received net 48 upvotes with no dissenting responses.
(Thanks to Dennis Gosnell for bringing this issue to my attention.)
Proposed Change Specification¶
Extend the meaning of -Wall
to include incomplete-uni-patterns
and
incomplete-record-updates
.
Effect and Interactions¶
Users using -Wall
will be warned when they use incomplete-uni-patterns
and
incomplete-record-updates
Costs and Drawbacks¶
Minimal development and maintenance costs. Existing code compiled with -Wall
will start warning if it uses incomplete-uni-patterns
or
incomplete-record-updates
Alternatives¶
Specify incomplete-uni-patterns
and incomplete-record-updates
manually.
Unresolved questions¶
None
Implementation Plan¶
Minimal planning required.