Check for un-saturated type family applications
authorSimon Peyton Jones <simonpj@microsoft.com>
Mon, 25 Aug 2014 14:13:02 +0000 (15:13 +0100)
committerSimon Peyton Jones <simonpj@microsoft.com>
Mon, 25 Aug 2014 14:18:06 +0000 (15:18 +0100)
This patch corrects an egregious error introduced by:

  commit 022f8750edf6f413fba31293435dcc62600eab77
  Author: Simon Peyton Jones <simonpj@microsoft.com>
  Date:   Thu May 15 16:07:04 2014 +0100

    Refactoring around TyCon.isSynTyCon

    * Document isSynTyCon better
    * Add isTypeSyonymTyCon for regular H98 type synonyms
    * Use isTypeSynonymTyCon rather than isSynTyCon where
      the former is really intended

At this particular spot in TcValidity we really do mean
isSynTyCon and not isTypeSynonymTyCon.

Fixes Trac #9433

compiler/typecheck/TcValidity.lhs
testsuite/tests/indexed-types/should_fail/T9433.hs [new file with mode: 0644]
testsuite/tests/indexed-types/should_fail/T9433.stderr [new file with mode: 0644]
testsuite/tests/indexed-types/should_fail/all.T

index f835782..9e518c7 100644 (file)
@@ -294,7 +294,7 @@ check_type ctxt rank (AppTy ty1 ty2)
         ; check_arg_type ctxt rank ty2 }
 
 check_type ctxt rank ty@(TyConApp tc tys)
-  | isTypeSynonymTyCon tc  = check_syn_tc_app ctxt rank ty tc tys
+  | isSynTyCon tc          = check_syn_tc_app ctxt rank ty tc tys
   | isUnboxedTupleTyCon tc = check_ubx_tuple  ctxt      ty    tys
   | otherwise              = mapM_ (check_arg_type ctxt rank) tys
 
@@ -305,6 +305,9 @@ check_type _ _ ty = pprPanic "check_type" (ppr ty)
 ----------------------------------------
 check_syn_tc_app :: UserTypeCtxt -> Rank -> KindOrType 
                  -> TyCon -> [KindOrType] -> TcM ()
+-- Used for type synonyms and type synonym families,
+-- which must be saturated, 
+-- but not data families, which need not be saturated
 check_syn_tc_app ctxt rank ty tc tys
   | tc_arity <= n_args   -- Saturated
        -- Check that the synonym has enough args
diff --git a/testsuite/tests/indexed-types/should_fail/T9433.hs b/testsuite/tests/indexed-types/should_fail/T9433.hs
new file mode 100644 (file)
index 0000000..c7b6161
--- /dev/null
@@ -0,0 +1,15 @@
+{-# LANGUAGE
+     TypeFamilies
+   , KindSignatures
+   #-}
+
+module T9433 where
+
+type family Id x :: *
+type instance Id a = a
+
+type family Map (f :: * -> *) x :: *
+type instance Map f [a] = [f a]
+
+x :: Map Id [Bool]
+x = []
diff --git a/testsuite/tests/indexed-types/should_fail/T9433.stderr b/testsuite/tests/indexed-types/should_fail/T9433.stderr
new file mode 100644 (file)
index 0000000..0b17f57
--- /dev/null
@@ -0,0 +1,4 @@
+\r
+T9433.hs:14:6:\r
+    Type synonym â€˜Id’ should have 1 argument, but has been given none\r
+    In the type signature for â€˜x’: x :: Map Id [Bool]\r
index 6d284cf..50eec86 100644 (file)
@@ -126,3 +126,5 @@ test('T9097', normal, compile_fail, [''])
 test('T9160', normal, compile_fail, [''])
 test('T9357', normal, compile_fail, [''])
 test('T9371', normal, compile_fail, [''])
+test('T9433', normal, compile_fail, [''])
+