Be more selective about when to print out roles with :info
authorRichard Eisenberg <eir@cis.upenn.edu>
Tue, 22 Oct 2013 15:16:42 +0000 (11:16 -0400)
committerRichard Eisenberg <eir@cis.upenn.edu>
Wed, 23 Oct 2013 13:23:30 +0000 (09:23 -0400)
compiler/main/PprTyThing.hs

index 1f458f0..c83552b 100644 (file)
@@ -197,18 +197,22 @@ pprTyCon ss tyCon
 
                                                  -- e.g. type T = forall a. a->a
   | Just cls <- tyConClass_maybe tyCon
-  = pp_roles $$ pprClass ss cls
+  = (pp_roles (== Nominal)) $$ pprClass ss cls
 
   | otherwise
-  = pp_roles $$ pprAlgTyCon ss tyCon
+  = (pp_roles (== Representational)) $$ pprAlgTyCon ss tyCon
 
   where
-    pp_roles = sdocWithDynFlags $ \dflags ->
-               let roles = suppressKinds dflags (tyConKind tyCon) (tyConRoles tyCon)
-               in ppUnless (all (== Representational) roles) $
-                  ptext (sLit "type role") <+> ppr tyCon <+> hsep (map ppr roles)
-
-    pp_tc_with_kind = vcat [ pp_roles
+      -- if, for each role, suppress_if role is True, then suppress the role
+      -- output
+    pp_roles :: (Role -> Bool) -> SDoc
+    pp_roles suppress_if
+      = sdocWithDynFlags $ \dflags ->
+        let roles = suppressKinds dflags (tyConKind tyCon) (tyConRoles tyCon)
+        in ppUnless (all suppress_if roles) $
+           ptext (sLit "type role") <+> ppr tyCon <+> hsep (map ppr roles)
+
+    pp_tc_with_kind = vcat [ pp_roles (const True)
                            , pprTyConHdr tyCon <+> dcolon
                              <+> pprTypeForUser (synTyConResKind tyCon) ]
     closed_family_header