Flag to not expand type families
Error messages can be ugly, especially when working with promoted types. I've been dealing with this for a long time with [one library in particular](https://hackage.haskell.org/package/lol). But I just encountered something truly heinous. Due to a minor mistake, GHC spit out 8 errors in total, the shortest of which was 60 lines, and the longest of which was 20,046 lines long. That's no typo: the last error is over 20,000 lines long. Props to GHC for handling such a mess. As the library author, I've learned to look paste these massive errors. But I'm afraid that some user is going to have a heart attack (or worse: give up and go home).
You can see in the error message that most of it is recurring blocks of
PrimePower
('PP
'(type-natural-0.3.0.0:Data.Type.Natural.Definitions.SSym1
(type-natural-0.3.0.0:Data.Type.Natural.Definitions.SSym1
(type-natural-0.3.0.0:Data.Type.Natural.Definitions.SSym1
(type-natural-0.3.0.0:Data.Type.Natural.Definitions.SSym1
(type-natural-0.3.0.0:Data.Type.Natural.Definitions.SSym1
(type-natural-0.3.0.0:Data.Type.Natural.Definitions.SSym1
(type-natural-0.3.0.0:Data.Type.Natural.Definitions.SSym1
type-natural-0.3.0.0:Data.Type.Natural.Definitions.ZSym0)))))),
type-natural-0.3.0.0:Data.Type.Natural.Definitions.SSym1
type-natural-0.3.0.0:Data.Type.Natural.Definitions.ZSym0))
and
(NextListElt
*
zq
((':)
*
(ZqBasic * Types.Q18869761 Types.Z)
((':)
*
(Types.Zq * Types.Q19393921, ZQ1)
((':)
*
(Types.Zq * Types.Q19918081, ZQ2)
((':)
*
(Types.Zq * Types.Q2149056001, ZQ3)
((':)
*
(Types.Zq * Types.Q3144961, ZQ4)
((':)
* (Types.Zq * Types.Q7338241, ZQ5) ('[] *))))))))),
I believe that GHC attempts to expand type synonyms as much as possible, which is great in many cases. But for this error, the repetition of fully expanded blocks completely hides the true nature of the error, especially since the user (obviously) makes heavy use of type synonyms anyway.
The feature I'm requesting is the ability to somehow reduce the mess in the attached error. Here are a few ideas:
- A flag to tell GHC to *not* expand type synonyms, i.e. if the user uses
N2
from Data.Type.Natural, GHC should print 'N2' instead of
type-natural-0.3.0.0:Data.Type.Natural.Definitions.SSym1
(type-natural-0.3.0.0:Data.Type.Natural.Definitions.SSym1
type-natural-0.3.0.0:Data.Type.Natural.Definitions.ZSym0)
- Allow library developers a way to tell the compiler how to print a certain entity, i.e., with a custom name. This is somewhat similar to the Custom Type Errors proposal, but I don't think that proposal includes a way to tell GHC how to print specific types/type synonyms.
Has anyone else run into this issue before? Are there any existing solutions or other ideas?
Trac metadata
Trac field | Value |
---|---|
Version | 7.10.2 |
Type | FeatureRequest |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |