Skip to content
  • Simon Peyton Jones's avatar
    Fix kind inference for data types. Again. · 62ed6957
    Simon Peyton Jones authored and Marge Bot's avatar Marge Bot committed
    This patch fixes several aspects of kind inference for data type
    declarations, especially data /instance/ declarations
    
    Specifically
    
    1. In kcConDecls/kcConDecl make it clear that the tc_res_kind argument
       is only used in the H98 case; and in that case there is no result
       kind signature; and hence no need for the disgusting splitPiTys in
       kcConDecls (now thankfully gone).
    
       The GADT case is a bit different to before, and much nicer.
       This is what fixes #18891.
    
       See Note [kcConDecls: kind-checking data type decls]
    
    2. Do not look at the constructor decls of a data/newtype instance
       in tcDataFamInstanceHeader. See GHC.Tc.TyCl.Instance
       Note [Kind inference for data family instances].  This was a
       new realisation that arose when doing (1)
    
       This causes a few knock-on effects in the tests suite, because
       we require more information than before in the instance /header/.
    
       New user-manual material about this in "Kind inference in data type
       declarations" and "Kind inference for data/newtype instance
       declarations".
    
    3. Minor improvement in kcTyClDecl, combining GADT and H98 cases
    
    4. Fix #14111 and #8707 by allowing the header of a data instance
       to affect kind inferece for the the data constructor signatures;
       as described at length in Note [GADT return types] in GHC.Tc.TyCl
    
       This led to a modest refactoring of the arguments (and argument
       order) of tcConDecl/tcConDecls.
    
    5. Fix #19000 by inverting the sense of the test in new_locs
       in GHC.Tc.Solver.Canonical.canDecomposableTyConAppOK.
    62ed6957