Importing constructor of associated data type fails
I will base my description on the code you find when searching for "instance PersistEntity" on http://www.yesodweb.com/book/persistent. In summary, the code looks like
instance PersistEntity Person where
...
data EntityField Person typ where
PersonId :: EntityField Person PersonId
PersonName :: EntityField Person String
PersonAge :: EntityField Person Int
...
This code is generated from TH (see above). I have not tested if it matters that it is generated. A first step could be to test if manually replacing the TH part yields different results.
The problem is: When i add this code in one module, do not create an export list for that module, and try to import the constructors explicitly (i.e. with a list) in a different module, it does not work.
I read and tried to follow the description on https://wiki.haskell.org/GHC/Type_families, chapter 4.3.
Testcase 1
(not really expected to work; still intersting error message)
import MyModuleContainingInstancePerson ( PersonId )
ghc says
‘PersonId’ is a data constructor of ‘EntityField’
To import it use
‘import’ MyModuleContainingInstancePerson( EntityField( VersionVersion ) )
or
‘import’ MyModuleContainingInstancePerson( EntityField(..) )
Testcase 2
(no export list in MyModuleContainingInstancePerson)
import MyModuleContainingInstancePerson ( EntityField(..) )
ghc says
Module ‘MyModuleContainingInstancePerson’ does not export ‘EntityField(..)’
Testcase 3
But when i do provide an export list in MyModuleContainingInstancePerson, like
module MyModuleContainingInstancePerson ( Person(..), EntityField(..) ) where ..
Testcase 2 suddenly works.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 7.8.4 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |