Name: Show NameSort in warning
authorBen Gamari <ben@smart-cactus.org>
Thu, 13 Aug 2015 18:18:56 +0000 (20:18 +0200)
committerBen Gamari <ben@smart-cactus.org>
Thu, 13 Aug 2015 19:04:32 +0000 (21:04 +0200)
This is quite useful information to know. Spotted when looking at #10769.

compiler/basicTypes/Name.hs

index ce8619a..506b60f 100644 (file)
@@ -127,6 +127,12 @@ data NameSort
   | System              -- A system-defined Id or TyVar.  Typically the
                         -- OccName is very uninformative (like 's')
 
+instance Outputable NameSort where
+  ppr (External _)    = text "external"
+  ppr (WiredIn _ _ _) = text "wired-in"
+  ppr  Internal       = text "internal"
+  ppr  System         = text "system"
+
 -- | BuiltInSyntax is for things like @(:)@, @[]@ and tuples,
 -- which have special syntactic forms.  They aren't in scope
 -- as such.
@@ -216,7 +222,10 @@ isInternalName name = not (isExternalName name)
 isHoleName :: Name -> Bool
 isHoleName = isHoleModule . nameModule
 
-nameModule name = nameModule_maybe name `orElse` pprPanic "nameModule" (ppr name)
+nameModule name =
+  nameModule_maybe name `orElse`
+  pprPanic "nameModule" (ppr (n_sort name) <+> ppr name)
+
 nameModule_maybe :: Name -> Maybe Module
 nameModule_maybe (Name { n_sort = External mod})    = Just mod
 nameModule_maybe (Name { n_sort = WiredIn mod _ _}) = Just mod