Skip to content
  • Ryan Scott's avatar
    Synchronize ClsInst.doTyConApp with TcTypeable validity checks (#15862) · fc7bdba6
    Ryan Scott authored
    Issue #15862 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.
    
    (cherry picked from commit 25ee60cd)
    fc7bdba6