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 |