Don't skip validity checks for built-in classes (#17355)
Issue #17355 (closed) occurred because the control flow for
TcValidity.check_valid_inst_head
was structured in such a way that
whenever it checked a special, built-in class (like Generic
or
HasField
), it would skip the most important check of all:
checkValidTypePats
, which rejects nonsense like this:
instance Generic (forall a. a)
This fixes the issue by carving out checkValidTypePats
from
check_valid_inst_head
so that checkValidTypePats
is always
invoked. check_valid_inst_head
has also been renamed to
check_special_inst_head
to reflect its new purpose of only
checking for instances headed by special classes.
Fixes #17355 (closed).