summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Peyton Jones <simonpj@microsoft.com>2014-08-25 15:13:02 +0100
committerAustin Seipp <austin@well-typed.com>2014-11-03 08:20:02 -0600
commitde531119362b343978c0a38d4fa75e80103baaa1 (patch)
treeefcaf06120e669af374eb3ecf6e97e5e5ad75bff
parentb15432c826fdad27afc45be617c117876d9f3e08 (diff)
downloadhaskell-de531119362b343978c0a38d4fa75e80103baaa1.tar.gz
Check for un-saturated type family applications
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 (cherry picked from commit ee4501bbad6480509e8a60b5ff89c0b0b228b66d) Conflicts: testsuite/tests/indexed-types/should_fail/all.T
-rw-r--r--compiler/typecheck/TcValidity.lhs5
-rw-r--r--testsuite/tests/indexed-types/should_fail/T9433.hs15
-rw-r--r--testsuite/tests/indexed-types/should_fail/T9433.stderr4
-rw-r--r--testsuite/tests/indexed-types/should_fail/all.T1
4 files changed, 24 insertions, 1 deletions
diff --git a/compiler/typecheck/TcValidity.lhs b/compiler/typecheck/TcValidity.lhs
index ebb375dd5e..7e73ee6289 100644
--- a/compiler/typecheck/TcValidity.lhs
+++ b/compiler/typecheck/TcValidity.lhs
@@ -290,7 +290,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
@@ -301,6 +301,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
index 0000000000..c7b6161f0d
--- /dev/null
+++ b/testsuite/tests/indexed-types/should_fail/T9433.hs
@@ -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
index 0000000000..0b17f57a0f
--- /dev/null
+++ b/testsuite/tests/indexed-types/should_fail/T9433.stderr
@@ -0,0 +1,4 @@
+
+T9433.hs:14:6:
+ Type synonym ‘Id’ should have 1 argument, but has been given none
+ In the type signature for ‘x’: x :: Map Id [Bool]
diff --git a/testsuite/tests/indexed-types/should_fail/all.T b/testsuite/tests/indexed-types/should_fail/all.T
index 53405747ca..dde335d046 100644
--- a/testsuite/tests/indexed-types/should_fail/all.T
+++ b/testsuite/tests/indexed-types/should_fail/all.T
@@ -120,3 +120,4 @@ test('T8368', normal, compile_fail, [''])
test('T8368a', normal, compile_fail, [''])
test('T8518', normal, compile_fail, [''])
test('T9160', normal, compile_fail, [''])
+test('T9433', normal, compile_fail, [''])