Suppress a misleading error message (Trac #7869)
authorSimon Peyton Jones <simonpj@microsoft.com>
Mon, 29 Apr 2013 16:28:20 +0000 (17:28 +0100)
committerSimon Peyton Jones <simonpj@microsoft.com>
Tue, 30 Apr 2013 08:51:08 +0000 (09:51 +0100)
We were saying
     The function `f' is applied to one argument,
     but its type `[a] -> b' has only one
which is obviously bogus.

This fix suppresses the explanation in cases where it may not
be the *right* explanation.

compiler/typecheck/TcUnify.lhs

index 601135d..4749d0c 100644 (file)
@@ -153,12 +153,15 @@ matchExpectedFunTys herald arity orig_ty
               Flexi        -> defer n_req ty }
 
        -- In all other cases we bale out into ordinary unification
-    go n_req ty = defer n_req ty
+       -- However unlike the meta-tyvar case, we are sure that the
+       -- number of arrows doesn't match up, so we can add a bit 
+       -- more context to the error message (cf Trac #7869)
+    go n_req ty = addErrCtxtM mk_ctxt $
+                  defer n_req ty
 
     ------------
     defer n_req fun_ty 
-      = addErrCtxtM mk_ctxt $
-        do { arg_tys <- newFlexiTyVarTys n_req openTypeKind
+      = do { arg_tys <- newFlexiTyVarTys n_req openTypeKind
                         -- See Note [Foralls to left of arrow]
            ; res_ty  <- newFlexiTyVarTy openTypeKind
            ; co   <- unifyType fun_ty (mkFunTys arg_tys res_ty)