+getInfo s name
+ = withSession s $ \hsc_env ->
+ do { mb_stuff <- tcRnGetInfo hsc_env name
+ ; case mb_stuff of
+ Nothing -> return Nothing
+ Just (thing, fixity, ispecs) -> do
+ { let rdr_env = ic_rn_gbl_env (hsc_IC hsc_env)
+ ; return (Just (thing, fixity, filter (plausible rdr_env) ispecs)) } }
+ where
+ plausible rdr_env ispec -- Dfun involving only names that are in ic_rn_glb_env
+ = all ok $ nameSetToList $ tyClsNamesOfType $ idType $ instanceDFunId ispec
+ where -- A name is ok if it's in the rdr_env,
+ -- whether qualified or not
+ ok n | n == name = True -- The one we looked for in the first place!
+ | isBuiltInSyntax n = True
+ | isExternalName n = any ((== n) . gre_name)
+ (lookupGRE_Name rdr_env n)
+ | otherwise = True