Skip to content
  • Vladislav Zavialov's avatar
    Treat kind/type variables identically, demolish FKTV · 5bc195b1
    Vladislav Zavialov authored and Marge Bot's avatar Marge Bot committed
    Implements GHC Proposal #24: .../ghc-proposals/blob/master/proposals/0024-no-kind-vars.rst
    Fixes Trac #16334, Trac #16315
    
    With this patch, scoping rules for type and kind variables have been
    unified: kind variables no longer receieve special treatment. This
    simplifies both the language and the implementation.
    
    User-facing changes
    -------------------
    
    * Kind variables are no longer implicitly quantified when an explicit
      forall is used:
    
        p ::             Proxy (a :: k)    -- still accepted
        p :: forall k a. Proxy (a :: k)    -- still accepted
        p :: forall   a. Proxy (a :: k)    -- no longer accepted
    
      In other words, now we adhere to the "forall-or-nothing" rule more
      strictly.
    
      Related function: RnTypes.rnImplicitBndrs
    
    * The -Wimplicit-kind-vars warning has been deprecated.
    
    * Kind variables are no longer implicitly quantified in constructor
      declarations:
    
        data T a        = T1 (S (a :: k) | forall (b::k). T2 (S b)  -- no longer ac...
    5bc195b1