<div dir="ltr">At this point you might want to ask on ghc-devs. They might ask you to document what you find out, though.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Oct 14, 2021 at 10:25 AM Benjamin Redelings <<a href="mailto:benjamin.redelings@gmail.com">benjamin.redelings@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
  
    
  
  <div>
    <p>Thanks!  Yes, that introduces the idea that requires kind
      inference.</p>
    <p>Interestingly, it contains a (kind-aware) type-inference
      algorithm, but no kind inference algorithm!</p>
    <p>Perhaps kind-inference is considered too "obvious" to require an
      algorithm.  The closest it comes is the rule:</p>
    <p>C :: k' -> k   and   C' :: k'  => C C' :: k</p>
    <p>This is helpful, but it would probably be beneficial for better
      documentation to exist SOMEWHERE.<br>
    </p>
    <p>-BenRI<br>
    </p>
    <div>On 10/13/21 3:49 PM, Ingle, Apoorv N
      wrote:<br>
    </div>
    <blockquote type="cite">
      
      Along with what Emil suggests, 
      <div>Sec 4. of A system of constructor classes:
        overloading and implicit higher-order polymorphism[1] may also
        be useful.</div>
      <div><br>
      </div>
      <div>— Apoorv</div>
      <div><br>
      </div>
      <div>[1]:  <a href="http://web.cecs.pdx.edu/~mpj/pubs/fpca93.pdf" target="_blank">http://web.cecs.pdx.edu/~mpj/pubs/fpca93.pdf</a> <br>
        <div><br>
        </div>
        <div><br>
          <blockquote type="cite">
            <div>On Oct 13, 2021, at 14:22, Emil Axelsson <<a href="mailto:78emil@gmail.com" target="_blank">78emil@gmail.com</a>>
              wrote:</div>
            <br>
            <div>
              <div>
                <p>Maybe <a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.134.7274&rep=rep1&type=pdf" target="_blank">
                    Typing Haskell in Haskell</a> is what you're looking
                  for?<br>
                </p>
                <pre cols="72">/ Emil</pre>
                <div>Den 2021-10-12 kl. 21:35,
                  skrev Benjamin Redelings:<br>
                </div>
                <blockquote type="cite">
                  Hi, <br>
                  <br>
                  1. I'm looking for resources that describe how to
                  implement kind Haskell 98 checking.  Does anyone have
                  any suggestions?
                  <br>
                  <br>
                  * I've looked at the PolyKinds paper, but it doesn't
                  cover type classes. <br>
                  <br>
                  * I've looked at the source code to GHC, but it is
                  hard to follow for a variety of reasons.  It isn't
                  laid out like an algorithm description, and the
                  complexity to handle options like PolyKinds and
                  DataKinds makes the code harder to follow.
                  <br>
                  <br>
                  <br>
                  2. One question that came up is how to handle type
                  variables that are present in class methods, but are
                  not type class parameters. If there are multiple
                  types/classes in a single recursive group, the kind of
                  such type variables might not be fully resolved until
                  a later type-or-class is processed.  Is there a
                  recommended approach? <br>
                  <br>
                  I can see two ways to proceed: <br>
                  <br>
                  i) First determine the kinds of all the data types,
                  classes, and type synonyms.  Then perform a second
                  pass over each type or class to determine the kinds of
                  type variables (in class methods) that are not type
                  class parameters.
                  <br>
                  <br>
                  ii) Alternatively, record the kind of each type
                  variable as it is encountered -- even though such
                  kinds may contain unification kind variables.  After
                  visiting all types-or-classes in the recursive group,
                  replace any kind variables with their definition, or
                  with a * if there is no definition. <br>
                  <br>
                  I've currently implement approach i), which requires
                  doing kind inference on class methods twice.  Is this
                  the recommended approach?
                  <br>
                  <br>
                  <br>
                  3. Also, is Haskell 98 kind checking the same as
                  Haskell 2010 kind checking? <br>
                  <br>
                  -BenRI <br>
                  <br>
                  <br>
                  _______________________________________________ <br>
                  Haskell-Cafe mailing list <br>
                  To (un)subscribe, modify options or view archives go
                  to: <br>
                  <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a>
                  <br>
                  Only members subscribed via the mailman list are
                  allowed to post.<br>
                </blockquote>
              </div>
              _______________________________________________<br>
              Haskell-Cafe mailing list<br>
              To (un)subscribe, modify options or view archives go to:<br>
              <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
              Only members subscribed via the mailman list are allowed
              to post.</div>
          </blockquote>
        </div>
        <br>
      </div>
    </blockquote>
  </div>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
Only members subscribed via the mailman list are allowed to post.</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div>brandon s allbery kf8nh</div><div><a href="mailto:allbery.b@gmail.com" target="_blank">allbery.b@gmail.com</a></div></div></div></div></div>