Improve error messages for roles by writing role names out
authorRichard Eisenberg <eir@cis.upenn.edu>
Wed, 28 Aug 2013 02:07:39 +0000 (22:07 -0400)
committerRichard Eisenberg <eir@cis.upenn.edu>
Wed, 28 Aug 2013 03:04:58 +0000 (23:04 -0400)
compiler/typecheck/TcDeriv.lhs
compiler/typecheck/TcTyClsDecls.lhs
compiler/types/CoAxiom.lhs

index 0a69165..144678e 100644 (file)
@@ -1477,7 +1477,7 @@ mkNewTypeEqn orig dflags tvs
                     ptext (sLit "GeneralizedNewtypeDeriving on this class;") $$
                     ptext (sLit "the last parameter of") <+>
                     quotes (ppr (className cls)) <+>
-                    ptext (sLit "is at role N")
+                    ptext (sLit "is at role Nominal")
 
 \end{code}
 
index 0cd4f2d..70e72f5 100644 (file)
@@ -2147,8 +2147,8 @@ inaccessibleCoAxBranch tc fi
 badRoleAnnot :: Name -> Role -> Role -> SDoc
 badRoleAnnot var annot inferred
   = hang (ptext (sLit "Role mismatch on variable") <+> ppr var <> colon)
-       2 (sep [ ptext (sLit "Annotation says"), ppr annot
-              , ptext (sLit "but role"), ppr inferred
+       2 (sep [ ptext (sLit "Annotation says"), pprFullRole annot
+              , ptext (sLit "but role"), pprFullRole inferred
               , ptext (sLit "is required") ])
 
 \end{code}
index e507607..ed1a684 100644 (file)
@@ -26,12 +26,13 @@ module CoAxiom (
        coAxBranchLHS, coAxBranchRHS, coAxBranchSpan, coAxBranchIncomps,
        placeHolderIncomps,
 
-       Role(..)
+       Role(..), pprFullRole
        ) where 
 
 import {-# SOURCE #-} TypeRep ( Type )
 import {-# SOURCE #-} TyCon ( TyCon )
 import Outputable
+import FastString
 import Name
 import Unique
 import Var
@@ -440,6 +441,11 @@ This is defined here to avoid circular dependencies.
 data Role = Nominal | Representational | Phantom
   deriving (Eq, Data.Data, Data.Typeable)
 
+pprFullRole :: Role -> SDoc
+pprFullRole Nominal          = ptext (sLit "Nominal")
+pprFullRole Representational = ptext (sLit "Representational")
+pprFullRole Phantom          = ptext (sLit "Phantom")
+
 instance Outputable Role where
   ppr Nominal          = char 'N'
   ppr Representational = char 'R'