<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
And I happened to bump into Sec 4. of Kind Inference for Datatypes[1]<br class="">
It atleast has the heading kind checking for H98<br class="">
<br class="">
— Apoorv <br class="">
<br class="">
<br class="">
[1]: <a href="https://arxiv.org/abs/1911.06153" class="">https://arxiv.org/abs/1911.06153</a>
<div class=""><span class=""><br class="">
<br class="">
<blockquote type="cite" class="">On Oct 14, 2021, at 09:24, Benjamin Redelings <<a href="mailto:benjamin.redelings@gmail.com" class="">benjamin.redelings@gmail.com</a>> wrote:<br class="">
<br class="">
Thanks!  Yes, that introduces the idea that requires kind inference.<br class="">
<br class="">
Interestingly, it contains a (kind-aware) type-inference algorithm, but no kind inference algorithm!<br class="">
<br class="">
Perhaps kind-inference is considered too "obvious" to require an algorithm.  The closest it comes is the rule:<br class="">
<br class="">
C :: k' -> k   and   C' :: k'  => C C' :: k<br class="">
<br class="">
This is helpful, but it would probably be beneficial for better documentation to exist SOMEWHERE.<br class="">
<br class="">
-BenRI<br class="">
<br class="">
On 10/13/21 3:49 PM, Ingle, Apoorv N wrote:<br class="">
<blockquote type="cite" cite="mid:582D1DA7-EBBE-4E52-8683-7444C2FE606D@uiowa.edu" class="">
Along with what Emil suggests, <br class="">
Sec 4. of A system of constructor classes: overloading and implicit higher-order polymorphism[1] may also be useful.<br class="">
<br class="">
— Apoorv<br class="">
<br class="">
[1]:  <a href="http://web.cecs.pdx.edu/~mpj/pubs/fpca93.pdf" class="">http://web.cecs.pdx.edu/~mpj/pubs/fpca93.pdf</a> <br class="">
<br class="">
<br class="">
<blockquote type="cite" class="">On Oct 13, 2021, at 14:22, Emil Axelsson <78emil@gmail.com> wrote:<br class="">
<br class="">
Maybe Typing Haskell in Haskell is what you're looking for?<br class="">
<br class="">
/ Emil<br class="">
Den 2021-10-12 kl. 21:35, skrev Benjamin Redelings:<br class="">
<blockquote type="cite" cite="mid:34939fd9-e592-315a-114b-f1f6d1fef686@gmail.com" class="">
Hi, <br class="">
<br class="">
1. I'm looking for resources that describe how to implement kind Haskell 98 checking.  Does anyone have any suggestions? <br class="">
<br class="">
* I've looked at the PolyKinds paper, but it doesn't cover type classes. <br class="">
<br class="">
* 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 class="">
<br class="">
<br class="">
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 class="">
<br class="">
I can see two ways to proceed: <br class="">
<br class="">
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 class="">
<br class="">
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 class="">
<br class="">
I've currently implement approach i), which requires doing kind inference on class methods twice.  Is this the recommended approach? <br class="">
<br class="">
<br class="">
3. Also, is Haskell 98 kind checking the same as Haskell 2010 kind checking? <br class="">
<br class="">
-BenRI <br class="">
<br class="">
<br class="">
_______________________________________________ <br class="">
Haskell-Cafe mailing list <br class="">
To (un)subscribe, modify options or view archives go to: <br class="">
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe <br class="">
Only members subscribed via the mailman list are allowed to post.<br class="">
</blockquote>
_______________________________________________<br class="">
Haskell-Cafe mailing list<br class="">
To (un)subscribe, modify options or view archives go to:<br class="">
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe<br class="">
Only members subscribed via the mailman list are allowed to post.<br class="">
</blockquote>
<br class="">
</blockquote>
</blockquote>
</span><br class="">
</div>
</body>
</html>