Dear CLC
Can I ask for your advice?
The fix is easy: it simply means giving the built-in class IP a representational role, thus
type role IP nominal representational -- New
class IP (x :: Symbol) a | x -> a where
ip :: a
Now, this shouldn't be a CLC issue at all. IP is a purely internal matter. It just happens to be the way that GHC implements the implicit-parameter feature of Haskell. The only user-visible change is that GHC will typecheck a few more programs that it previously rejected.
However IP is exported by base:GHC.Base. That entire module should not be in `base` but today it is, so the change makes a user-visible change to `base`.
Would you like a proposal? I ask because it's all busy-work if you plan to remove GHC.Base from `base` in any case.
I have only just realised this. (It never occurred to me that IP would leak into `base`.) The patch is ready to land.
Thanks
Simon