Simplify and improve coverage of ":info" instance lookup
authorPatrick Palka <patrick@parcs.ath.cx>
Thu, 14 Nov 2013 22:40:55 +0000 (17:40 -0500)
committerPatrick Palka <patrick@parcs.ath.cx>
Fri, 15 Nov 2013 00:13:19 +0000 (19:13 -0500)
During instance lookup, we can treat classes and data families like any
other TyCon instead of special-casing them.  This approach, aside from
being simpler, has the benefit of returning extra relevant instances for
classes and data families.  For example, given

class A a
instance B (a :: Constraint)
instance A B

":info B" will now also print "instance A B" where previously it didn't
due to the special casing of class TyCons in lookupInsts.

This improves upon the existing patch for Trac #4175

compiler/typecheck/TcRnDriver.lhs

index 594d7fd..16b399b 100644 (file)
@@ -2055,15 +2055,6 @@ tcRnGetInfo hsc_env name
 
 lookupInsts :: TyThing -> TcM ([ClsInst],[FamInst])
 lookupInsts (ATyCon tc)
-  | Just cls <- tyConClass_maybe tc
-  = do  { inst_envs <- tcGetInstEnvs
-        ; return (classInstances inst_envs cls, []) }
-
-  | isOpenFamilyTyCon tc || isTyConAssoc tc
-  = do  { inst_envs <- tcGetFamInstEnvs
-        ; return ([], familyInstances inst_envs tc) }
-
-  | otherwise
   = do  { (pkg_ie, home_ie) <- tcGetInstEnvs
         ; (pkg_fie, home_fie) <- tcGetFamInstEnvs
                 -- Load all instances for all classes that are