Consistent pretty-printing of type families
Say I have this silly open type family declaration:
type family F a
type instance F a = a
type instance F a = Int
GHC complains:
Foo.hs:8:15: error:
Conflicting family instance declarations:
F a -- Defined at Foo.hs:8:15
F a -- Defined at Foo.hs:9:15
Now let's do some silliness with a closed type family:
type family F a where
F a = a
F a = Int
GHC warns:
T6018.hs:9:5: warning:
Type family instance equation is overlapped:
F a = Int
Finally, some silliness with a kind-polymorphic type family:
type family Gc (a :: k) (b :: k) = r | r -> k where
Gc a b = Int
GHC complains:
T6018.hs:9:5: error:
Type family equation violates injectivity annotation.
Injective kind variable ‘k’ is not inferable from the RHS type variables.
In the RHS of type family equation:
forall (k :: BOX) (a :: k) (b :: k). Gc a b = Int
In the equations for closed type family ‘Gc’
In the type family declaration for ‘Gc’
There are some inconsistencies in pprinting of type family equations:
- for open type families we print the location where the equation was defined but we do not print the RHS
- for closed type families we print the RHS but we do not print the location in the source file
- kind-polymorphic equations are not indented
I would like to have a consistent pretty-printing of type family equations, one that prints the RHS, source code location and indents kind-polymorphic equations. The difference in pretty printing between open and closed type families comes from the difference between pprinting CoAxBranch and FamInst.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 7.11 |
| Type | Task |
| TypeOfFailure | OtherFailure |
| Priority | lowest |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | msosn |
| Operating system | |
| Architecture |