<div dir="ltr">Ok, ticket created. I'll go see how much I can figure out on my own.<div><br></div><div><a href="https://ghc.haskell.org/trac/ghc/ticket/11014">https://ghc.haskell.org/trac/ghc/ticket/11014</a><br><div><br></div><div>WRT the "bound at" bits in "relevant bindings", I have no strong opinion. What about omitting them if they are in the same file as the main error? Or maybe they always are? I'm not totally clear how it chooses which bindings are relevant.</div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Oct 24, 2015 at 12:50 PM, Simon Peyton Jones <span dir="ltr"><<a href="mailto:simonpj@microsoft.com" target="_blank">simonpj@microsoft.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div lang="EN-GB" link="#0563C1" vlink="#954F72">
<div>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d">I’m all for it. Can advise. (Make a ticket.)<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d">Thanks!<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d">Simon<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif"> Glasgow-haskell-users [mailto:<a href="mailto:glasgow-haskell-users-bounces@haskell.org" target="_blank">glasgow-haskell-users-bounces@haskell.org</a>]
<b>On Behalf Of </b>Evan Laforge<br>
<b>Sent:</b> 24 October 2015 03:48<br>
<b>To:</b> GHC users<br>
<b>Subject:</b> type error formatting<u></u><u></u></span></p>
</div>
</div><div><div class="h5">
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
<span style="font-family:"Arial",sans-serif">Here's a typical simple type error from GHC:</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
<span style="font-family:"Courier New""><u></u> <u></u></span></p>
</div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
<span style="font-family:"Courier New"">Derive/Call/India/Pakhawaj.hs:142:62:</span><br>
<span style="font-family:"Courier New""> Couldn't match type ‘Text’ with ‘(a1, Syllable)’</span><br>
<span style="font-family:"Courier New""> Expected type: [([(a1, Syllable)], [Sequence Bol])]</span><br>
<span style="font-family:"Courier New""> Actual type: [([Syllable], [Sequence Bol])]</span><br>
<span style="font-family:"Courier New""> Relevant bindings include</span><br>
<span style="font-family:"Courier New""> syllables :: [(a1, Syllable)]</span><br>
<span style="font-family:"Courier New""> (bound at Derive/Call/India/Pakhawaj.hs:141:16)</span><br>
<span style="font-family:"Courier New""> best_match :: [(a1, Syllable)]</span><br>
<span style="font-family:"Courier New""> -> Maybe (Int, ([(a1, Syllable)], [(a1, Sequence Bol)]))</span><br>
<span style="font-family:"Courier New""> (bound at Derive/Call/India/Pakhawaj.hs:141:5)</span><br>
<span style="font-family:"Courier New""> In the second argument of ‘mapMaybe’, namely ‘all_bols’</span><br>
<span style="font-family:"Courier New""> In the second argument of ‘($)’, namely</span><br>
<span style="font-family:"Courier New""> ‘mapMaybe (match_bols syllables) all_bols’</span><br>
<br>
<span style="font-family:"Arial",sans-serif">I've been having more trouble than usual reading GHC's errors, and I finally spent some time to think about it. The problem is that this new "relevant bindings include" section gets in between the expected and actual
types (I still don't like that wording but I've gotten used to it), which is the most critical part, and the location context, which is second most critical. Notice the same effect in the previous sentence :) After I see a type error the next thing I want
to see is the where it happened, so I have to skip over the bindings, which can be long and complicated. Then I usually know what to do, and only look into the bindings if something more complicated is going on, like wonky inference. So how about reordering
the message:</span><br>
<br>
<span style="font-family:"Courier New"">Derive/Call/India/Pakhawaj.hs:142:62:</span><br>
<span style="font-family:"Courier New""> Couldn't match type ‘Text’ with ‘(a1, Syllable)’</span><br>
<span style="font-family:"Courier New""> Expected type: [([(a1, Syllable)], [Sequence Bol])]</span><br>
<span style="font-family:"Courier New""> Actual type: [([Syllable], [Sequence Bol])]</span><br>
<span style="font-family:"Courier New""> In the second argument of ‘mapMaybe’, namely ‘all_bols’</span><br>
<span style="font-family:"Courier New""> In the second argument of ‘($)’, namely</span><br>
<span style="font-family:"Courier New""> ‘mapMaybe (match_bols syllables) all_bols’</span><br>
<span style="font-family:"Courier New""> Relevant bindings include</span><br>
<span style="font-family:"Courier New""> syllables :: [(a1, Syllable)]</span><br>
<span style="font-family:"Courier New""> (bound at Derive/Call/India/Pakhawaj.hs:141:16)</span><br>
<span style="font-family:"Courier New""> best_match :: [(a1, Syllable)]</span><br>
<span style="font-family:"Courier New""> -> Maybe (Int, ([(a1, Syllable)], [(a1, Sequence Bol)]))</span><br>
<span style="font-family:"Courier New""> (bound at Derive/Call/India/Pakhawaj.hs:141:5)</span><br>
<br>
<span style="font-family:"Arial",sans-serif">After this, why not go one step further and set off the various sections visibly to make it easier to scan. The context section can also be really long if it gets an entire do block or record:</span><br>
<br>
<span style="font-family:"Courier New"">Derive/Call/India/Pakhawaj.hs:142:62:</span><br>
<span style="font-family:"Courier New""> * Couldn't match type ‘Text’ with ‘(a1, Syllable)’</span><br>
<span style="font-family:"Courier New""> Expected type: [([(a1, Syllable)], [Sequence Bol])]</span><br>
<span style="font-family:"Courier New""> Actual type: [([Syllable], [Sequence Bol])]</span><br>
<span style="font-family:"Courier New""> * In the second argument of ‘mapMaybe’, namely ‘all_bols’</span><br>
<span style="font-family:"Courier New""> In the second argument of ‘($)’, namely</span><br>
<span style="font-family:"Courier New""> ‘mapMaybe (match_bols syllables) all_bols’</span><br>
<span style="font-family:"Courier New""> * Relevant bindings include</span><br>
<span style="font-family:"Courier New""> syllables :: [(a1, Syllable)]</span><br>
<span style="font-family:"Courier New""> (bound at Derive/Call/India/Pakhawaj.hs:141:16)</span><br>
<span style="font-family:"Courier New""> best_match :: [(a1, Syllable)]</span><br>
<span style="font-family:"Courier New""> -> Maybe (Int, ([(a1, Syllable)], [(a1, Sequence Bol)]))</span><br>
<span style="font-family:"Courier New""> (bound at Derive/Call/India/Pakhawaj.hs:141:5)</span><u></u><u></u></p>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
<u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
<span style="font-family:"Arial",sans-serif">Or alternately, taking up a bit more vertical space:</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
<u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
<span style="font-family:"Courier New"">Derive/Call/India/Pakhawaj.hs:142:62:<br>
Couldn't match type ‘Text’ with ‘(a1, Syllable)’<br>
Expected type: [([(a1, Syllable)], [Sequence Bol])]<br>
Actual type: [([Syllable], [Sequence Bol])]</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
-----------------------------<span style="font-family:"Courier New""><br>
In the second argument of ‘mapMaybe’, namely ‘all_bols’<br>
In the second argument of ‘($)’, namely<br>
‘mapMaybe (match_bols syllables) all_bols’</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
-----------------------------<span style="font-family:"Courier New""><br>
Relevant bindings include</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
<span style="font-family:"Courier New""> syllables :: [(a1, Syllable)]<br>
(bound at Derive/Call/India/Pakhawaj.hs:141:16)<br>
best_match :: [(a1, Syllable)]<br>
-> Maybe (Int, ([(a1, Syllable)], [(a1, Sequence Bol)]))<br>
(bound at Derive/Call/India/Pakhawaj.hs:141:5)</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
<u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
<span style="font-family:"Arial",sans-serif">Thoughts? It seems simple enough that I could do myself, but of course not without buy-in.</span><u></u><u></u></p>
</div>
</div>
</div></div></div>
</div>
</div>
</blockquote></div><br></div>