Synchronize ClsInst.doTyConApp with TcTypeable validity checks (#15862)
Issue #15862 (closed) demonstrated examples of type constructors on which
TcTypeable.tyConIsTypeable
would return False
, but the Typeable
constraint solver in ClsInst
(in particular, doTyConApp
) would
try to generate Typeable
evidence for anyway, resulting in
disaster. This incongruity was caused by the fact that doTyConApp
was using a weaker validity check than tyConIsTypeable
to determine
if a type constructor warrants Typeable
evidence or not. The
solution, perhaps unsurprisingly, is to use tyConIsTypeable
in
doTyConApp
instead.
To avoid import cycles between ClsInst
and TcTypeable
, I factored
out tyConIsTypeable
into its own module, TcTypeableValidity
.
Fixes #15862 (closed).