PrelInfo: Ensure that tuple promoted datacon names are in knownKeyNames
authorBen Gamari <bgamari.foss@gmail.com>
Fri, 3 Jun 2016 20:19:17 +0000 (22:19 +0200)
committerBen Gamari <ben@smart-cactus.org>
Sat, 4 Jun 2016 07:35:49 +0000 (09:35 +0200)
Previously the promoted datacons of the boxed tuple types were not
included in knownKeyNames, which lead to #12132.

Test Plan: Test with included TypeOf testcase

Reviewers: austin, simonpj

Reviewed By: simonpj

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D2279

GHC Trac Issues: #12132

compiler/iface/LoadIface.hs
compiler/prelude/PrelInfo.hs
testsuite/tests/typecheck/should_run/TypeOf.hs
testsuite/tests/typecheck/should_run/TypeOf.stdout

index 64d100f..ba58c9e 100644 (file)
@@ -169,7 +169,7 @@ for any module with an instance decl or RULE that we might want.
 
 * BUT, if the TyCon is a wired-in TyCon, we don't really need its interface;
   but we must make sure we read its interface in case it has instances or
-  rules.  That is what LoadIface.loadWiredInHomeInterface does.  It's called
+  rules.  That is what LoadIface.loadWiredInHomeIface does.  It's called
   from TcIface.{tcImportDecl, checkWiredInTyCon, ifCheckWiredInThing}
 
 * HOWEVER, only do this for TyCons.  There are no wired-in Classes.  There
index 74005ed..52493b4 100644 (file)
@@ -85,19 +85,20 @@ knownKeyNames
 
            , concatMap tycon_kk_names typeNatTyCons
 
-           , concatMap (rep_names . tupleTyCon Boxed) [2..mAX_TUPLE_SIZE]  -- Yuk
+           , concatMap (tycon_kk_names . tupleTyCon Boxed) [2..mAX_TUPLE_SIZE]  -- Yuk
 
            , cTupleTyConNames
              -- Constraint tuples are known-key but not wired-in
              -- They can't show up in source code, but can appear
-             -- in intreface files
+             -- in interface files
 
            , map idName wiredInIds
            , map (idName . primOpId) allThePrimOps
            , basicKnownKeyNames ]
 
   where
-    -- "kk" short for "known-key"
+  -- All of the names associated with a known-key thing.
+  -- This includes TyCons, DataCons and promoted TyCons.
   tycon_kk_names :: TyCon -> [Name]
   tycon_kk_names tc = tyConName tc : (rep_names tc ++ concatMap thing_kk_names (implicitTyConThings tc))
 
index efd26f9..53e0359 100644 (file)
@@ -31,4 +31,5 @@ main = do
   print $ typeOf (Proxy :: Proxy *)
   print $ typeOf (Proxy :: Proxy ★)
   print $ typeOf (Proxy :: Proxy 'PtrRepLifted)
+  print $ typeOf (Proxy :: Proxy '(1, "hello"))
   print $ typeOf (Proxy :: Proxy (~~))
index 6f160f5..3e3396f 100644 (file)
@@ -20,4 +20,5 @@ Proxy Constraint Constraint
 Proxy Constraint Constraint
 Proxy Constraint Constraint
 Proxy RuntimeRep 'PtrRepLifted
+Proxy (Nat,Symbol) ('(,) Nat Symbol 1 "hello")
 Proxy (Constraint -> Constraint -> Constraint) ~~