Representation-polymorphic HasField (fixes #22156)
This generalises the HasField class to support representation polymorphism,
so that instead of
type HasField :: forall {k} . k -> Type -> Type -> Constraint
we have
type HasField :: forall {k} {r_rep} {a_rep} . k -> TYPE r_rep -> TYPE a_rep -> Constraint
This change was approved by the CLC here: https://github.com/haskell/core-libraries-committee/issues/194#issuecomment-1800412006
The required code changes were surprisingly small. However, a small wrinkle is that this change makes EDIT: this happened anyway with the GHC.Records no longer inferred as Safe due to the new import of TYPE from GHC.Exts. As far as I know TYPE is not currently exported from a Trustworthy module, so I've resorted to marking GHC.Records as Trustworthy. I don't know if there is a better solution here.ghc-internal split, and I don't think it is particularly specific to GHC.Records anyway.
Edited by Adam Gundry