Fix #10713.
authorRichard Eisenberg <eir@cis.upenn.edu>
Mon, 3 Aug 2015 12:53:03 +0000 (08:53 -0400)
committerRichard Eisenberg <eir@cis.upenn.edu>
Tue, 4 Aug 2015 14:51:32 +0000 (10:51 -0400)
When doing the apartness/flattening thing, we really only need to
eliminate non-generative tycons, not *all* families. (Data families
are indeed generative!)

compiler/types/FamInstEnv.hs
testsuite/tests/indexed-types/should_compile/T10713.hs [new file with mode: 0644]
testsuite/tests/indexed-types/should_compile/all.T

index bea00fc..11e93df 100644 (file)
@@ -1045,7 +1045,9 @@ coreFlattenTy in_scope = go
                                (m2, ty2') = go m1 ty2 in
                            (m2, AppTy ty1' ty2')
     go m (TyConApp tc tys)
-      | isFamilyTyCon tc
+         -- NB: Don't just check if isFamilyTyCon: this catches *data* families,
+         -- which are generative and thus can be preserved during flattening
+      | not (isGenerativeTyCon tc Nominal)
       = let (m', tv) = coreFlattenTyFamApp in_scope m tc tys in
         (m', mkTyVarTy tv)
 
diff --git a/testsuite/tests/indexed-types/should_compile/T10713.hs b/testsuite/tests/indexed-types/should_compile/T10713.hs
new file mode 100644 (file)
index 0000000..cf4af28
--- /dev/null
@@ -0,0 +1,13 @@
+{-# LANGUAGE TypeFamilies, PolyKinds, DataKinds #-}
+
+module T10713 where
+
+import Data.Proxy
+
+type family TEq t s where
+  TEq t t = 'True
+  TEq t s = 'False
+data family T a
+
+foo :: Proxy (TEq (T Int) (T Bool)) -> Proxy 'False
+foo = id
index 773ad30..ff5070b 100644 (file)
@@ -36,7 +36,7 @@ test('ind2',
      ['ind2', '-v0'])
 test('impexp',
      extra_clean(['Exp.hi', 'Exp.o', 'Imp.hi', 'Imp.o']),
-     multimod_compile, 
+     multimod_compile,
      ['Imp', '-w -no-hs-main -c'])
 
 test('ATLoop',
@@ -260,3 +260,4 @@ test('T10340', normal, compile, [''])
 test('T10226', normal, compile, [''])
 test('T10507', normal, compile, [''])
 test('T10634', normal, compile, [''])
+test('T10713', normal, compile, [''])