Open Type Family Kind Resolution
The following is a minimal example of this problem:
-- Section 1
data Animal = Dog | Cat | Mouse
data Planet = Earth | Jupiter | Mars | Saturn
type family ToRes (k :: Type) = (j :: Type)
type instance ToRes Planet = Animal
-- Section 2
type family Thing k (a :: k) = (b :: ToRes k)
type instance Thing Planet 'Earth = 'Dog
The last line fails with:
Expected kind 'ToRes Planet', but 'Dog has kind Animal
What's weird is that, if I take the part labeled Section 1 and move it into another module and then import that module into one that contains Section 2, it compiles fine. In this minimal case, that's not a huge problem, but for my real use case, splitting the type instances into two modules like this forces me to use an orphan.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 8.0.1 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |