<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Hi,</p>
    <blockquote type="cite"
cite="mid:010f017cc31f63bb-475c1cf3-17f9-4904-9d14-45fbe88cbe51-000000@us-east-2.amazonses.com">
      <blockquote type="cite">
        <pre class="moz-quote-pre" wrap="">
Questions:

1. It seems like this separation is actually necessary, in order to apply generalization only to let arguments written by the programmer, and not to let bindings introduced during desugaring. Is that right?
</pre>
      </blockquote>
      <pre class="moz-quote-pre" wrap="">
I don't think so. That is, if we did it all in one pass, I still think we could get generalization right.</pre>
    </blockquote>
    <p>I guess I asked this question wrong.  I mean to say, if we did
      the two passes in the reverse order (desugaring first, followed by
      typechecking), that would not work, right?</p>
    <p>As the wiki says:</p>
    <p data-sourcepos="26:3-26:257">"This late desugaring is somewhat
      unusual. It is much more common to desugar the program before
      typechecking, or renaming, because that presents the renamer and
      typechecker with a much smaller language to deal with. However,
      GHC's organisation means that</p>
    <ul data-sourcepos="28:3-30:0">
      <li data-sourcepos="28:3-28:77">error messages can display
        precisely the syntax that the user wrote; and</li>
      <li data-sourcepos="29:3-30:0">desugaring is not required to
        preserve type-inference properties.</li>
    </ul>
    <p>"<br>
    </p>
    <p>
    </p>
    <blockquote type="cite"
cite="mid:010f017cc31f63bb-475c1cf3-17f9-4904-9d14-45fbe88cbe51-000000@us-east-2.amazonses.com">
      <blockquote type="cite">
        <pre class="moz-quote-pre" wrap="">
2. Does the output of type checking contain type lambdas?
</pre>
      </blockquote>
      <pre class="moz-quote-pre" wrap="">
Yes. See below.

</pre>
      <blockquote type="cite">
        <pre class="moz-quote-pre" wrap="">
3. Does the type checking pass determine where to add dictionary arguments?
</pre>
      </blockquote>
      <pre class="moz-quote-pre" wrap="">
Yes. See below.

</pre>
      <blockquote type="cite">
        <pre class="moz-quote-pre" wrap="">
4. Are there any other resources I should be looking at?
</pre>
      </blockquote>
      <pre class="moz-quote-pre" wrap="">
Yes. You want to enable -fprint-typechecker-elaboration (and possible -fprint-explicit-coercions). With the former, you get to see all this stuff you're looking for. It's normally suppressed so that the output resembles the user's code.

I hope this helps!
Richard</pre>
    </blockquote>
    <p>Hmm... so, I think I see how this works now.  I don't think
      '-fprint-explicit-coercions' does anything here though.</p>
    <p>$ ghc -ddump-tc Test2.hs -fprint-typechecker-elaboration</p>
    <p>...<br>
    </p>
    <p>AbsBinds [a_a2hp] [$dNum_a2hB]<br>
        {Exports: [g <= g_a2hz<br>
                     wrap: <>]<br>
         Exported types: g :: forall a. Num a => a -> a -> a<br>
                         [LclId]<br>
         Binds: g x_aYk y_aYl = (y_aYl * x_aYk) + 1<br>
         Evidence: [EvBinds{[W] $dNum_a2hs = $dNum_a2hq<br>
                            [W] $dNum_a2hw = $dNum_a2hq<br>
                            [W] $dNum_a2hq = $dNum_a2hB}]}</p>
    <p>...<br>
    </p>
    <p>The type and dictionary arguments are visible here (along with
      the evidence bindings), but type and dictionary applications are
      only visible if you use -ddump-tc-ast, which is a lot more
      verbose.  (I don't think there is another flag that shows these
      applications?)  Since I didn't initially know what "evidence" was,
      and there is nothing to say that a_a2hp is a type lambda argument,
      this was pretty opaque until I managed to read the tc-ast and the
      light went on.<br>
    </p>
    <p>I can see now that the type and dictionary arguments are added by
      annotating the AST.<br>
    </p>
    <p>Is there anywhere on the GHC wiki that explains how to interpret
      this output, and says that the type and dictionary applications
      ARE there, just not shown by '-ddump-tc'?</p>
    <p>Perhaps it would be helpful to add some basic description of what
      comes out of the typechecker to a page like this one? (below)<br>
    </p>
    <p>   
      <a class="moz-txt-link-freetext" href="https://gitlab.haskell.org/ghc/ghc/-/wikis/commentary/compiler/hsc-main">https://gitlab.haskell.org/ghc/ghc/-/wikis/commentary/compiler/hsc-main</a></p>
    <p>-BenRI<br>
    </p>
    <p><br>
    </p>
  </body>
</html>