[Haskell-cafe] Resources on how to implement (Haskell 98) kind-checking?

Carter Schonwald carter.schonwald at gmail.com
Wed Oct 13 12:49:28 UTC 2021

I believe you can treat kind chekcing /inference in the H98 setting as
another instance of hindley Milner type inference where the types are the
terms, and kinds are the types.  And where there are no user lambdas.  So
it’s only “combinator” definitions as introduced by user defined type class
and type and data definitions.

Moreover, I think you can limit yourself to considering it a sort of
 simply typed calculus for the purposes of using a unification approach.
ESP since poly kinds aren’t there.

I hope that helps, but if not please ask more!

On Tue, Oct 12, 2021 at 3:37 PM Benjamin Redelings <
benjamin.redelings at gmail.com> wrote:

> Hi,
> 1. I'm looking for resources that describe how to implement kind Haskell
> 98 checking.  Does anyone have any suggestions?
> * I've looked at the PolyKinds paper, but it doesn't cover type classes.
> * 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.
> 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?
> I can see two ways to proceed:
> 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.
> 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.
> I've currently implement approach i), which requires doing kind
> inference on class methods twice.  Is this the recommended approach?
> 3. Also, is Haskell 98 kind checking the same as Haskell 2010 kind
> checking?
> -BenRI
> _______________________________________________
> Haskell-Cafe mailing list
> To (un)subscribe, modify options or view archives go to:
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Only members subscribed via the mailman list are allowed to post.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20211013/da91f1bb/attachment.html>

More information about the Haskell-Cafe mailing list