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

GHC ghc-devs at haskell.org
Sat Oct 24 20:04:30 UTC 2015


#11014: re-order GHC type errors for clarity
-------------------------------------+-------------------------------------
           Reporter:  elaforge       |             Owner:  elaforge
               Type:  feature        |            Status:  new
  request                            |
           Priority:  normal         |         Milestone:
          Component:  Compiler       |           Version:  7.11
           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:
-------------------------------------+-------------------------------------
 Here's a typical simple type error from GHC:

 {{{#!hs
 Derive/Call/India/Pakhawaj.hs:142:62:
     Couldn't match type ‘Text’ with ‘(a1, Syllable)’
     Expected type: [([(a1, Syllable)], [Sequence Bol])]
       Actual type: [([Syllable], [Sequence Bol])]
     Relevant bindings include
       syllables :: [(a1, Syllable)]
         (bound at Derive/Call/India/Pakhawaj.hs:141:16)
       best_match :: [(a1, Syllable)]
                     -> Maybe (Int, ([(a1, Syllable)], [(a1, Sequence
 Bol)]))
         (bound at Derive/Call/India/Pakhawaj.hs:141:5)
     In the second argument of ‘mapMaybe’, namely ‘all_bols’
     In the second argument of ‘($)’, namely
       ‘mapMaybe (match_bols syllables) all_bols’
 }}}

 The order of sections is "couldn't match", "expected actual", "relevant
 bindings", "context" (in the second argument etc.).  I think it would be
 easier to read as "couldn't match", "expected actual", "context",
 "bindings", and with a * to mark each section:

 {{{#!hs
 Derive/Call/India/Pakhawaj.hs:142:62:
   * Couldn't match type ‘Text’ with ‘(a1, Syllable)’
     Expected type: [([(a1, Syllable)], [Sequence Bol])]
       Actual type: [([Syllable], [Sequence Bol])]
   * In the second argument of ‘mapMaybe’, namely ‘all_bols’
     In the second argument of ‘($)’, namely
       ‘mapMaybe (match_bols syllables) all_bols’
   * Relevant bindings include
       syllables :: [(a1, Syllable)]
         (bound at Derive/Call/India/Pakhawaj.hs:141:16)
       best_match :: [(a1, Syllable)]
                     -> Maybe (Int, ([(a1, Syllable)], [(a1, Sequence
 Bol)]))
         (bound at Derive/Call/India/Pakhawaj.hs:141:5)
 }}}

 I'm sure there are plenty of other sections that don't show up in this
 simple example, in any case they should go from most to least critical and
 be marked off with a *.

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


More information about the ghc-tickets mailing list