<div dir="ltr"><p dir="ltr">Elm has a interesting take on this: a collection of all error messages (<a href="https://github.com/elm-lang/error-message-catalog">https://github.com/elm-lang/error-message-catalog</a>).<br></p><p>I created an empty repo (<a href="https://github.com/bollu/hask-error-messages-catalog">https://github.com/bollu/hask-error-messages-catalog</a>) and shot an email to haskell-cafe asking for examples where GHC generates unintuitive error messages. Hopefully, I can start collecting these so there's context the next time this comes up.</p><p>(PRs welcome :)</p><p>Thanks, </p><p>~Siddharth</p><p>On Mon 5 Jun, 2017, 22:56 Evan Laforge, <<a href="mailto:qdunkan@gmail.com" target="_blank">qdunkan@gmail.com</a>> wrote:<br></p><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">This is a bit off topic, but is there a collection of not-so-great<br>
error messages along with opinions about what they should be?  Like a<br>
wiki page or something?<br>
<br>
I just stumbled across one and was going to complain, but didn't know<br>
the most productive way to do that, aside from try to fix it myself.<br>
<br>
Specifically, I'm working in a small EDSL that uses lots of small<br>
expressions composed together with a repurposed (.) operator.  The<br>
pretty printer layout causes the context section of each type error to<br>
become huge, for instance:<br>
<br>
Derive/Solkattu/MridangamScore.hs:110:60:<br>
    Couldn't match type ‘Derive.Solkattu.Sequence.Note<br>
                           (Derive.Solkattu.Solkattu.Note<br>
                              Derive.Solkattu.MridangamDsl.Stroke)’<br>
                   with ‘[Derive.Solkattu.Sequence.Note<br>
                            (Derive.Solkattu.Solkattu.Note<br>
                               Derive.Solkattu.MridangamDsl.Stroke)]’<br>
    Expected type: [Sequence]<br>
      Actual type: [Derive.Solkattu.Sequence.Note<br>
                      (Derive.Solkattu.Solkattu.Note<br>
                         Derive.Solkattu.MridangamDsl.Stroke)]<br>
    In the second argument of ‘($)’, namely<br>
      ‘nadai 7<br>
       $ repeat 2 kook<br>
         . od<br>
           . __<br>
             . k<br>
               . d<br>
                 . __<br>
                   . k<br>
         [ keeps walking to the right for many many lines ]<br>
    In the second argument of ‘($)’, namely<br>
      ‘korvai adi<br>
       $ nadai 7<br>
         $ repeat 2 kook<br>
           . od<br>
             [ again ]<br>
    In the second argument of ‘($)’, namely<br>
       [ and again ]<br>
<br>
<br>
You can probably easily reproduce this by making a lot of little<br>
expressions and putting an error in someplace.  What I think it should<br>
be is put more things on a horizontal line, or maybe cap the<br>
expression at a certain number of lines.  Or maybe the "zooming out"<br>
contexts could replace the previous expression with {- previous<br>
expression -} to emphasize the difference.<br>
<br>
<br>
Also, the other thing to think about before changing type errors is<br>
that tons of ghc tests rely on (almost) exact error output.  Probably<br>
the first task is to make an abstract output, then change the tests to<br>
rely on that (or at least a legacy formatting mode), so that every<br>
change doesn't break a million tests.<br>
<br>
On Sun, Jun 4, 2017 at 8:20 PM, Richard Eisenberg <<a href="mailto:rae@cs.brynmawr.edu" target="_blank">rae@cs.brynmawr.edu</a>> wrote:<br>
><br>
>> On Jun 3, 2017, at 11:50 AM, Ben Gamari <<a href="mailto:ben@smart-cactus.org" target="_blank">ben@smart-cactus.org</a>> wrote:<br>
>><br>
>> In particular, Richard Eisenberg<br>
>> advocated that error message documents look like,<br>
>><br>
>>    -- A dynamically typed value embedded in an error message<br>
>>    data ErrItem = forall a. (Outputable a, Typeable a). ErrItem a<br>
>><br>
>>    type ErrDoc = Doc ErrItem<br>
><br>
> I retract this argument.<br>
><br>
> Otherwise, I contribute only a hearty thanks to whoever is working on this, which likely has a larger impact on the adoption of Haskell than anything I've done. :)<br>
><br>
> Richard<br>
> _______________________________________________<br>
> ghc-devs mailing list<br>
> <a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a><br>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a><br>
_______________________________________________<br>
ghc-devs mailing list<br>
<a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a><br>
</blockquote></div></div><div dir="ltr">-- <br></div><div data-smartmail="gmail_signature"><div dir="ltr">Sending this from my phone, please excuse any typos!</div></div>