[Haskell-cafe] th-kinds v0.0.0

Louis Wasserman wasserman.louis at gmail.com
Mon Mar 15 20:31:12 EDT 2010


I'm going to phrase this as a challenge, because I think that's likely to
get the best response:

I just released a package,
th-kinds<http://hackage.haskell.org/package/th-kinds>,
which attempts to automatically infer the kind of a specified type, type
constructor, type family, type class, or pretty much anything else that has
a kind.

This package was developed in response to a sort-of challenge from Brent
Yorgey on #haskell to create this functionality.  So, uh, I stayed up last
night until 5 am learning unification algorithms and implementing
this...heh.

It rolls its own kind inference, so I don't know if it's adequately powerful
to handle all the wacky types you can construct.  Things I have tested it
on:

   - IO and ST
   - Many primitive types, including unboxed tuples and State#
   - mtl
   - newtype Fix f = Fix (f (Fix f))
   - data Tree a = Leaf a | Bin (Tree a) (Tree a)
   - data Foo a b = a (tests proper defaulting behavior)
   - A type family from my old TrieMap package with kind -- I kid you not
   -- ((* -> *) -> ((* -> *) -> * -> *) -> (* -> *) -> * -> * -> *)

Things that it will not work on, and that I don't think will change:

   - GADT types that cannot be reified by TH.  Essentially, I think this is
   "the set of GADT data types that actually couldn't be implemented without
   GADTs."  Not sure, though.  In any event, at the moment, I don't think
   there's any hope of handling GADTs in TH at this point, so I don't really
   object to this problem.

Anyway, y'all should attempt to break th-kinds.  Tell me if you can
construct a type for which my inference checker breaks, but not because you
get an error message saying "Can't reify a GADT data constructor..."

By the way, I'd like to bump
these<http://hackage.haskell.org/trac/ghc/ticket/3916>
tickets <http://hackage.haskell.org/trac/ghc/ticket/3920>.  They're
certainly related, but I'm not sure if they're genuinely equivalent.  It's
really irritating, though, that kind parsing is so broken in TH, and I think
that a TH backend guru should be able to figure out where there's a foldr
instead of a foldl...  th-kinds includes a workaround to this bug, but if
the bug is fixed, it'll break again.  Yuck, bugs.

Louis Wasserman
wasserman.louis at gmail.com
http://profiles.google.com/wasserman.louis
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20100315/3ae1a9bc/attachment-0001.html


More information about the Haskell-Cafe mailing list