• simonpj@microsoft.com's avatar
    Do dependency analysis when kind-checking type declarations · 6ea06bbf
    simonpj@microsoft.com authored
    This patch fixes Trac #4875.  The main point is to do dependency
    analysis on type and class declarations, and kind-check them in
    dependency order, so as to improve error messages.
    This patch means that a few programs that would typecheck before won't
    typecheck any more; but before we were (naughtily) going beyond
    Haskell 98 without any language-extension flags, and Trac #4875
    convinces me that doing so is a Bad Idea.
    Here's an example that won't typecheck any more
           data T a b = MkT (a b)
           type F k = T k Maybe
    If you look at T on its own you'd default 'a' to kind *->*;
    and then kind-checking would fail on F.
    But GHC currently accepts this program beause it looks at
    the *occurrences* of T.
HsDecls.lhs 36.6 KB