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
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.