Don't warn about missed specialisations for ClassOps.
I wrote this note to explain the reasoning which I will just quote in full.
{- Note [Missed specialisation for ClassOps]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In #19592 I saw a number of missed specialisation warnings
which were the result of things like:
case isJumpishInstr @X86.Instr $dInstruction_s7f8 eta3_a78C of { ...
where isJumpishInstr is part of the Instruction class and defined like
this:
class Instruction instr where
...
isJumpishInstr :: instr -> Bool
...
isJumpishInstr is a ClassOp which will select the right method
from within the dictionary via our built in rules. See also
Note [ClassOp/DFun selection] in GHC.Tc.TyCl.Instance.
We don't give these unfoldings, and as a result the specialiser
complains. But usually this doesn't matter. The simplifier will
apply the rule and we end up with
case isJumpishInstrImplX86 eta3_a78C of { ...
Since isJumpishInstrImplX86 is defined for a concrete instance (given
by the dictionary) it is usually already well specialised!
Theoretically the implementation of a method could still be overloaded
over a different type class than what it's a method of. But I wasn't able
to make this go wrong, and SPJ thinks this should be fine as well.
So I decided to remove the warnings for failed specialisations on ClassOps
alltogether as they do more harm than good.
See also #19586 (closed)
Edited by Andreas Klebinger