[GHC] #11243: Use Type Synonyms to Compress Errors
GHC
ghc-devs at haskell.org
Thu Dec 17 17:24:32 UTC 2015
#11243: Use Type Synonyms to Compress Errors
-------------------------------------+-------------------------------------
Reporter: crockeea | Owner:
Type: feature | Status: new
request |
Priority: normal | Milestone: 8.2.1
Component: Compiler | Version: 7.10.2
Keywords: | Operating System: Unknown/Multiple
Architecture: | Type of failure: None/Unknown
Unknown/Multiple |
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
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:
1. 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)
}}}
2. 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?
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11243>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list