• Simon Peyton Jones's avatar
    Significant refactor of Lint · a262ea49
    Simon Peyton Jones authored
    This refactoring of Lint was triggered by #17923, which is
    fixed by this patch.
    The main change is this.  Instead of
       lintType :: Type -> LintM LintedKind
    we now have
       lintType :: Type -> LintM LintedType
    Previously, all of typeKind was effectively duplicate in lintType.
    Moreover, since we have an ambient substitution, we still had to
    apply the substition here and there, sometimes more than once. It
    was all very tricky, in the end, and made my head hurt.
    Now, lintType returns a fully linted type, with all substitutions
    performed on it.  This is much simpler.
    The same thing is needed for Coercions.  Instead of
      lintCoercion :: OutCoercion
                   -> LintM (LintedKind, LintedKind,
                             LintedType, LintedType, Role)
    we now have
      lintCoercion :: Coercion -> LintM LintedCoercion
    Much simpler!  The code is shorter and less bug-prone.
    There are a lot of knock on effects.  But life is now better.
Code owners : Ben Gamari
Lint.hs 112 KB