As Vlad notes in [1], getting rid of FreeKiTyVars isn't as simple as it would appear, as we still treat kinds and types differently in other places, such as data type declarations. For instance:

    data Proxy (a :: k) = Proxy -- k is brought into scope implicitly by `extractDataDefnKindVars`

I don't know how to overcome this awkwardness, so if you have suggestions, please comment at [1].

Ryan S.
-----
[1] https://gitlab.haskell.org/ghc/ghc/merge_requests/361#note_6709