Skip to content

Use HsTyPats in associated type family defaults

Ryan Scott requested to merge RyanGlScott/ghc:wip/T16110-T16356 into master

Associated type family default declarations behave strangely in a couple of ways:

  1. If one tries to bind the type variables with an explicit forall, the forall'd part will simply be ignored. (#16110 (closed))
  2. One cannot use visible kind application syntax on the left-hand sides of associated default equations, unlike every other form of type family equation. (#16356 (closed))

Both of these issues have a common solution. Instead of using LHsQTyVars to represent the left-hand side arguments of an associated default equation, we instead use HsTyPats, which is what other forms of type family equations use. In particular, here are some highlights of this patch:

  • FamEqn is no longer parameterized by a pats type variable, as the feqn_pats field is now always HsTyPats.
  • The new design for FamEqn in chronicled in Note [Type family instance declarations in HsSyn].
  • TyFamDefltEqn now becomes the same thing as TyFamInstEqn. This means that many of TyFamDefltEqn's code paths can now reuse the code paths for TyFamInstEqn, resulting in substantial simplifications to various parts of the code dealing with associated type family defaults.

Fixes #16110 (closed) and #16356 (closed).

Merge request reports