Spurious "defined but not used" warnings for constructors of types deriving Read
Consider the following code:
data D = D { ds :: String, db :: Bool }
deriving (Read, Show)
main :: IO ()
main = do
let s = "D { ds = \"oi\", db = True }"
print (ds (read s))
print (db (read s))
With -Wall, ghc emits the following warning:
Warning: Defined but not used: data constructor `D'
I think this warning is not justified, because the D constructor is used to parse s.
The testcase above was derived from a program where D held a bunch of configuration fields for the program, and s was read from configuration file.
I would think the fix should be a rule along the lines of: if a data type derives from Read, then all of its constructors and field names are considered used.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 6.8.2 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | low |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | Unknown |
| Architecture | Unknown |