Skip to content

Desugar quoted uses of DerivingVia and expression type signatures properly

Ryan Scott requested to merge wip/T18388 into master

The way that GHC.HsToCore.Quote desugared quoted via types (e.g., deriving via forall a. [a] instance Eq a => Eq (List a)) and explicit type annotations in signatures (e.g., f = id @a :: forall a. a -> a) was completely wrong, as it did not implement the scoping guidelines laid out in Note [Scoped type variables in bindings]. This is easily fixed.

While I was in town, I did some minor cleanup of related Notes:

  • Note [Scoped type variables in bindings] and Note [Scoped type variables in class and instance declarations] say very nearly the same thing. I decided to just consolidate the two Notes into Note [Scoped type variables in quotes].
  • Note [Don't quantify implicit type variables in quotes] is somewhat outdated, as it predates GHC 8.10, where the forall-or-nothing rule requires kind variables to be explicitly quantified in the presence of an explicit forall. As a result, the running example in that Note doesn't even compile. I have changed the example to something simpler that illustrates the same point that the original Note was making.

Fixes #18388 (closed).

Merge request reports