Add pragCompleteDName to templateHaskellNames
authorRyan Scott <ryan.gl.scott@gmail.com>
Thu, 26 Jan 2017 04:32:17 +0000 (23:32 -0500)
committerRyan Scott <ryan.gl.scott@gmail.com>
Thu, 26 Jan 2017 04:32:17 +0000 (23:32 -0500)
95dc6dc070deac733d4a4a63a93e606a2e772a67 forgot to add `pragCompleteDName`
to the list of `templateHaskellNames`, which caused a panic if you actually
tried to splice a `COMPLETE` pragma using Template Haskell. This applies the
easy fix and augments the regression test to check for this in the future.

compiler/prelude/THNames.hs
testsuite/tests/th/T13098.hs

index e051082..253a89b 100644 (file)
@@ -67,7 +67,7 @@ templateHaskellNames = [
     classDName, instanceWithOverlapDName,
     standaloneDerivWithStrategyDName, sigDName, forImpDName,
     pragInlDName, pragSpecDName, pragSpecInlDName, pragSpecInstDName,
     classDName, instanceWithOverlapDName,
     standaloneDerivWithStrategyDName, sigDName, forImpDName,
     pragInlDName, pragSpecDName, pragSpecInlDName, pragSpecInstDName,
-    pragRuleDName, pragAnnDName, defaultSigDName,
+    pragRuleDName, pragCompleteDName, pragAnnDName, defaultSigDName,
     dataFamilyDName, openTypeFamilyDName, closedTypeFamilyDName,
     dataInstDName, newtypeInstDName, tySynInstDName,
     infixLDName, infixRDName, infixNDName,
     dataFamilyDName, openTypeFamilyDName, closedTypeFamilyDName,
     dataInstDName, newtypeInstDName, tySynInstDName,
     infixLDName, infixRDName, infixNDName,
index 77e23f3..8df07d2 100644 (file)
@@ -1,4 +1,6 @@
+{-# LANGUAGE PatternSynonyms #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE ViewPatterns #-}
 
 module T13098 where
 
 
 module T13098 where
 
@@ -7,3 +9,19 @@ import Language.Haskell.TH
 $( sequence [ dataD (cxt []) (mkName "T") [PlainTV (mkName "a")]
                      Nothing [normalC (mkName "T") []] []
           , pragCompleteD [mkName "T"] Nothing ] )
 $( sequence [ dataD (cxt []) (mkName "T") [PlainTV (mkName "a")]
                      Nothing [normalC (mkName "T") []] []
           , pragCompleteD [mkName "T"] Nothing ] )
+
+$([d| class LL f where
+        go :: f a -> ()
+
+      instance LL [] where
+        go _ = ()
+
+      pattern T2 :: LL f => f a
+      pattern T2 <- (go -> ())
+
+      {-# COMPLETE T2 :: [] #-}
+
+      -- No warning
+      foo :: [a] -> Int
+      foo T2 = 5
+    |])