• Simon Peyton Jones's avatar
    Stop inferring over-polymorphic kinds · 1f5cc9dc
    Simon Peyton Jones authored
    Before this patch GHC was trying to be too clever
    (Trac #16344); it succeeded in kind-checking this
    polymorphic-recursive declaration
        data T ka (a::ka) b
          = MkT (T Type           Int   Bool)
                (T (Type -> Type) Maybe Bool)
    As Note [No polymorphic recursion] discusses, the "solution" was
    horribly fragile.  So this patch deletes the key lines in
    TcHsType, and a wodge of supporting stuff in the renamer.
    There were two regressions, both the same: a closed type family
    decl like this (T12785b) does not have a CUSK:
      type family Payload (n :: Peano) (s :: HTree n x) where
        Payload Z (Point a) = a
        Payload (S n) (a `Branch` stru) = a
    To kind-check the equations we need a dependent kind for
    Payload, and we don't get that any more.  Solution: make it
    a CUSK by giving the result kind -- probably a good thing anyway.
    The other case (T12442) was very similar: a close type family
    declaration without a CUSK.
T12785b.hs 1.23 KB