Skip to content
  • Simon Peyton Jones's avatar
    Allow kind-variable binders in type signatures · c5554f82
    Simon Peyton Jones authored
    This is the last major addition to the kind-polymorphism story,
    by allowing (Trac #5938)
    
     type family F a   -- F :: forall k. k -> *
     data T a          -- T :: forall k. k -> *
     type instance F (T (a :: Maybe k)) = Char
    
    The new thing is the explicit 'k' in the type signature on 'a',
    which itself is inside a type pattern for F.
    
    Main changes are:
    
    * HsTypes.HsBSig now has a *pair* (kvs, tvs) of binders,
      the kind variables and the type variables
    
    * extractHsTyRdrTyVars returns a pair (kvs, tvs)
      and the function itself has moved from RdrHsSyn to RnTypes
    
    * Quite a bit of fiddling with
         TcHsType.tcHsPatSigType and tcPatSig
      which have become a bit simpler.  I'm still not satisfied
      though.  There's some consequential fiddling in TcRules too.
    
    * Removed the unused HsUtils.collectSigTysFromPats
    
    There's a consequential wibble to Haddock too
    c5554f82