diff --git a/compiler/basicTypes/Module.hs b/compiler/basicTypes/Module.hs
index ac5efd4a2cf48e3b579b23a0cbe30f81a47ce936..85e852fa5d7e2f1872d5c758760a2473384533e9 100644
--- a/compiler/basicTypes/Module.hs
+++ b/compiler/basicTypes/Module.hs
@@ -326,11 +326,13 @@ stablePackageKeyCmp p1 p2 = packageKeyFS p1 `compare` packageKeyFS p2
 
 instance Outputable PackageKey where
    ppr pk = getPprStyle $ \sty -> sdocWithDynFlags $ \dflags ->
-    text (packageKeyPackageIdString dflags pk)
-    -- Don't bother qualifying if it's wired in!
-       <> (if qualPackage sty pk && not (pk `elem` wiredInPackageKeys)
-            then char '@' <> ftext (packageKeyFS pk)
-            else empty)
+    case packageKeyPackageIdString dflags pk of
+      Nothing -> ftext (packageKeyFS pk)
+      Just pkg -> text pkg
+           -- Don't bother qualifying if it's wired in!
+           <> (if qualPackage sty pk && not (pk `elem` wiredInPackageKeys)
+                then char '@' <> ftext (packageKeyFS pk)
+                else empty)
 
 instance Binary PackageKey where
   put_ bh pid = put_ bh (packageKeyFS pid)
diff --git a/compiler/main/Packages.hs b/compiler/main/Packages.hs
index 28f2f2d2c316e1ad5b11be6c274e1663e74ce2b5..aa97280a290dbcc6448442b59ec603ec9c3ea571 100644
--- a/compiler/main/Packages.hs
+++ b/compiler/main/Packages.hs
@@ -1325,12 +1325,10 @@ missingDependencyMsg (Just parent)
 
 -- -----------------------------------------------------------------------------
 
-packageKeyPackageIdString :: DynFlags -> PackageKey -> String
+packageKeyPackageIdString :: DynFlags -> PackageKey -> Maybe String
 packageKeyPackageIdString dflags pkg_key
-    | pkg_key == mainPackageKey = "main"
-    | otherwise = maybe "(unknown)"
-                      sourcePackageIdString
-                      (lookupPackage dflags pkg_key)
+    | pkg_key == mainPackageKey = Just "main"
+    | otherwise = fmap sourcePackageIdString (lookupPackage dflags pkg_key)
 
 -- | Will the 'Name' come from a dynamically linked library?
 isDllName :: DynFlags -> PackageKey -> Module -> Name -> Bool
diff --git a/compiler/main/Packages.hs-boot b/compiler/main/Packages.hs-boot
index 2f898f19d3e7284c2909f38cae8e94686db13210..f2343b66c9d739e8f3417d0b7ff8b8f499b38ef8 100644
--- a/compiler/main/Packages.hs-boot
+++ b/compiler/main/Packages.hs-boot
@@ -3,4 +3,4 @@ module Packages where
 import {-# SOURCE #-} Module (PackageKey)
 import {-# SOURCE #-} DynFlags (DynFlags)
 data PackageState
-packageKeyPackageIdString :: DynFlags -> PackageKey -> String
+packageKeyPackageIdString :: DynFlags -> PackageKey -> Maybe String