Improve validity check to give better error message
authorSimon Peyton Jones <simonpj@microsoft.com>
Thu, 30 May 2013 11:33:56 +0000 (12:33 +0100)
committerSimon Peyton Jones <simonpj@microsoft.com>
Thu, 30 May 2013 13:03:49 +0000 (14:03 +0100)
Fixes Trac #7809

compiler/typecheck/TcValidity.lhs

index e232598..5437719 100644 (file)
@@ -305,7 +305,7 @@ check_syn_tc_app ctxt rank ty tc tys
         ; liberal <- xoptM Opt_LiberalTypeSynonyms
         ; if not liberal || isSynFamilyTyCon tc then
                 -- For H98 and synonym families, do check the type args
-                mapM_ (check_mono_type ctxt synArgMonoType) tys
+                mapM_ check_arg tys
 
           else  -- In the liberal case (only for closed syns), expand then check
           case tcView ty of   
@@ -314,13 +314,15 @@ check_syn_tc_app ctxt rank ty tc tys
 
   | GhciCtxt <- ctxt  -- Accept under-saturated type synonyms in 
                       -- GHCi :kind commands; see Trac #7586
-  = mapM_ (check_mono_type ctxt synArgMonoType) tys
+  = mapM_ check_arg tys
 
   | otherwise
   = failWithTc (arityErr "Type synonym" (tyConName tc) tc_arity n_args)
   where
     n_args = length tys
     tc_arity  = tyConArity tc
+    check_arg | isSynFamilyTyCon tc = check_arg_type  ctxt rank
+              | otherwise           = check_mono_type ctxt synArgMonoType
          
 ----------------------------------------
 check_ubx_tuple :: UserTypeCtxt -> KindOrType