Disambiguate Repeated Identifiers for data types in error messages
If, in an interactive context, you redefine a type, but then try to use functions for the previous definition, it will (as expected) give you an error message. The following code would trigger this in an interactive context:
data X = Y Int
f (Y i) = i
data X = Y Int | Z String
f (Y 3)
However the error message is not very good:
Couldn't match expected type `:Interactive.X'
with actual type `:Interactive.X'
This is very uninformative to the user if they do not understand what's going on.
The following GHC API code can replicate this:
runDeclsWithLocation "Interactive.hs" 1 "data X = Y Int"
runDeclsWithLocation "Asdf.hs" 2 "f (Y i) = i"
runDeclsWithLocation "Bloop.hs" 3 "data X = Y Int | Z String"
runStmtWithLocation "Test.hs" 4 "f (Y 3)" RunToCompletion
Note that varying the location given to runStmt and runDecls (the string as well as the line number) seems to have no effect upon anything. I started out with just "<interactive>" but varied it to check - no effect on anything as far as I can tell.
How can I make this error message more informative? I would ideally like something like
Couldn't match expected type `:Interactive1.X'
with actual type `:Interactive5.X'
or really anything that caused these types to be visibly different.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 7.6.3 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |