`mkEtaWW` warns on Haddock's `reparenTyVar` function
When a validate build compiles Haddock, I get the usual wall of warnings, but this one stood out as odd to me:
WARNING:
mkEtaWW
[,] HsTyVarBndr () a_shQQ
$wreparenTyVar
@a_shQQ
@()
@~(ww_shQV :: XParTy a_shQQ ~# EpAnn AnnParen)
@~(ww1_shQZ :: NoGhcTc a_shQQ ~# a_shQQ)
ww2_slp1
ww3_slp2
ww4_slp3
eta1_slp8
Call stack:
CallStack (from HasCallStack):
warnPprTrace, called at compiler/GHC/Core/Opt/Arity.hs:1625:10 in ghc:GHC.Core.Opt.Arity
And this is the definition of reparenTyVar:
-- | Add parenthesis around the types in a 'HsTyVarBndr' (see 'reparenTypePrec')
reparenTyVar :: (XRecCond a) => HsTyVarBndr flag a -> HsTyVarBndr flag a
reparenTyVar (UserTyVar x flag n) = UserTyVar x flag n
reparenTyVar (KindedTyVar x flag n kind) = KindedTyVar x flag n (reparenLType kind)
reparenTyVar v@XTyVarBndr{} = v
Where XRecCond probably carries some rather intricate TTG evidence.
Mapping back the warning output to the code in mkEtaWW
warnPprTrace True "mkEtaWW" ((ppr orig_oss <+> ppr orig_ty) $$ ppr_orig_expr)
, I think orig_oss simply outputs [,], which the pretty-printed output of [NoOneShotInfo, NoOneShotInfo]. The orig_ty is (a specialisation of) the result type of reparenTyVar, HsTyVarBndr flag a. The latter clearly is not an arrow type. Neither are there any unsafe coerces that might have led to this type error.
So I ask: Why do we get a "type error" here? (In the sense that the arity type clearly says "two more non-oneshot lambdas", whereas the orig_ty type simply isn't an arrow type.)
Would we expect the warning to trigger for this code? I certainly did not.