Fix nasty bug in the type free-var finder, at last

Authored by simonpj on Oct 26 2018, 5:54 AM.

Description

Fix nasty bug in the type free-var finder, at last

Consider the type

forall k. b -> k

where

b :: k -> Type

Here the 'k' in b's kind must be a different 'k' to the forall k,
because 'b' is free in the expression. So we must return 'k'
among the free vars returned from tyCoVarsOfType applied that
type. But we weren't.

This is an outright bug, although we don't have a program that
fails because of it.

It's easy to fix, too: see TyCoRep

Note [Closing over free variable kinds]

This fix has been in the pipeline for ages because it fell into
the Trac Trac #14880 swamp. But this patch nails it.