[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