[GHC] #11014: re-order GHC type errors for clarity

GHC ghc-devs at haskell.org
Tue Nov 24 13:02:49 UTC 2015


#11014: re-order GHC type errors for clarity
-------------------------------------+-------------------------------------
        Reporter:  elaforge          |                Owner:  elaforge
            Type:  feature request   |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  7.11
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
 Type of failure:  Incorrect         |  Unknown/Multiple
  warning at compile-time            |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):  Phab:D1427
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by Ben Gamari <ben@…>):

 In [changeset:"c05fdddec71f9dc8ebe62d751ccf03367128072a/ghc" c05fddd/ghc]:
 {{{
 #!CommitTicketReference repository="ghc"
 revision="c05fdddec71f9dc8ebe62d751ccf03367128072a"
 Rearrange error msgs and add section markers (Trac #11014).

 This puts the "Relevant bindings" section at the end.

 It uses a TcErrors.Report Monoid to divide messages by importance and
 then mappends them together.  This is not the most efficient way since
 there are various intermediate Reports and list appends, but it probably
 doesn't matter since error messages shouldn't get that large, and are
 usually prepended.  In practice, everything is `important` except
 `relevantBindings`, which is `supplementary`.

 ErrMsg's errMsgShortDoc and errMsgExtraInfo were extracted into ErrDoc,
 which has important, context, and suppelementary fields.  Each of those
 three sections is marked with a bullet character, '•' on unicode
 terminals and '*' on ascii terminals.  Since this breaks tons of tests,
 I also modified testlib.normalise_errmsg to strip out '•'s.

 --- Additional notes:

 To avoid prepending * to an empty doc, I needed to filter empty docs.
 This seemed less error-prone than trying to modify everyone who produces
 SDoc to instead produce Maybe SDoc.  So I added `Outputable.isEmpty`.
 Unfortunately it needs a DynFlags, which is kind of bogus, but otherwise
 I think I'd need another Empty case for SDoc, and then it couldn't be a
 newtype any more.

 ErrMsg's errMsgShortString is only used by the Show instance, which is
 in turn only used by Show HscTypes.SourceError, which is in turn only
 needed for the Exception instance.  So it's probably possible to get rid
 of errMsgShortString, but that would a be an unrelated cleanup.

 Fixes #11014.

 Test Plan: see above

 Reviewers: austin, simonpj, thomie, bgamari

 Reviewed By: thomie, bgamari

 Subscribers: simonpj, nomeata, thomie

 Differential Revision: https://phabricator.haskell.org/D1427

 GHC Trac Issues: #11014
 }}}

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11014#comment:5>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list