Skip to content

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
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information