2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
4 \section{Type subsumption and unification}
8 -- Full-blown subsumption
9 tcSubPat, tcSubExp, tcSub, tcGen,
10 checkSigTyVars, checkSigTyVarsWrt, bleatEscapedTvs, sigCtxt,
12 -- Various unifications
13 unifyTauTy, unifyTauTyList, unifyTheta,
14 unifyKind, unifyKinds, unifyFunKind,
17 --------------------------------
19 Expected(..), tcInfer, readExpectedType,
20 zapExpectedType, zapExpectedTo, zapExpectedBranches,
21 subFunTys, unifyFunTys,
22 zapToListTy, unifyListTy,
23 zapToTyConApp, unifyTyConApp,
27 #include "HsVersions.h"
29 import HsSyn ( HsExpr(..) , MatchGroup(..), HsMatchContext(..),
30 hsLMatchPats, pprMatches, pprMatchContext )
31 import TcHsSyn ( mkHsDictLet, mkHsDictLam,
32 ExprCoFn, idCoercion, isIdCoercion, mkCoercion, (<.>), (<$>) )
33 import TypeRep ( Type(..), PredType(..), TyNote(..) )
35 import TcRnMonad -- TcType, amongst others
36 import TcType ( TcKind, TcType, TcSigmaType, TcRhoType, TcTyVar, TcTauType,
37 TcTyVarSet, TcThetaType, Expected(..), TcTyVarDetails(..),
38 SkolemInfo( GenSkol ), MetaDetails(..),
39 pprTcTyVar, isTauTy, isSigmaTy, mkFunTy, mkFunTys, mkTyConApp,
40 tcSplitAppTy_maybe, tcSplitTyConApp_maybe,
41 tyVarsOfType, mkPhiTy, mkTyVarTy, mkPredTy,
42 typeKind, tcSplitFunTy_maybe, mkForAllTys, mkAppTy,
43 tidyOpenType, tidyOpenTypes, tidyOpenTyVar, tidyOpenTyVars,
44 pprType, tidySkolemTyVar, isSkolemTyVar )
45 import Kind ( Kind(..), SimpleKind, KindVar, isArgTypeKind,
46 openTypeKind, liftedTypeKind, mkArrowKind,
47 isOpenTypeKind, argTypeKind, isLiftedTypeKind, isUnliftedTypeKind,
48 isSubKind, pprKind, splitKindFunTys )
49 import Inst ( newDicts, instToId, tcInstCall )
50 import TcMType ( condLookupTcTyVar, LookupTyVarResult(..),
51 tcSkolType, newKindVar, tcInstTyVars, newMetaTyVar,
52 newTyFlexiVarTy, zonkTcKind, zonkType, zonkTcType, zonkTcTyVarsAndFV,
53 readKindVar, writeKindVar )
54 import TcSimplify ( tcSimplifyCheck )
55 import TcIface ( checkWiredInTyCon )
56 import TcEnv ( tcGetGlobalTyVars, findGlobals )
57 import TyCon ( TyCon, tyConArity, tyConTyVars )
58 import TysWiredIn ( listTyCon )
59 import Id ( Id, mkSysLocal )
60 import Var ( Var, varName, tyVarKind )
61 import VarSet ( emptyVarSet, unitVarSet, unionVarSet, elemVarSet, varSetElems )
63 import Name ( Name, isSystemName, mkSysTvName )
64 import ErrUtils ( Message )
65 import SrcLoc ( noLoc )
66 import BasicTypes ( Arity )
67 import Util ( notNull, equalLength )
73 * A hole is always filled in with an ordinary type, not another hole.
75 %************************************************************************
77 \subsection{'hole' type variables}
79 %************************************************************************
82 newHole = newMutVar (error "Empty hole in typechecker")
84 tcInfer :: (Expected ty -> TcM a) -> TcM (a,ty)
86 = do { hole <- newHole
87 ; res <- tc_infer (Infer hole)
88 ; res_ty <- readMutVar hole
89 ; return (res, res_ty) }
91 readExpectedType :: Expected ty -> TcM ty
92 readExpectedType (Infer hole) = readMutVar hole
93 readExpectedType (Check ty) = returnM ty
95 zapExpectedType :: Expected TcType -> Kind -> TcM TcTauType
96 -- In the inference case, ensure we have a monotype
97 -- (including an unboxed tuple)
98 zapExpectedType (Infer hole) kind
99 = do { ty <- newTyFlexiVarTy kind ;
100 writeMutVar hole ty ;
103 zapExpectedType (Check ty) kind
104 | typeKind ty `isSubKind` kind = return ty
105 | otherwise = do { ty1 <- newTyFlexiVarTy kind
108 -- The unify is to ensure that 'ty' has the desired kind
109 -- For example, in (case e of r -> b) we push an OpenTypeKind
112 zapExpectedBranches :: MatchGroup id -> Expected TcRhoType -> TcM (Expected TcRhoType)
113 -- If there is more than one branch in a case expression,
114 -- and exp_ty is a 'hole', all branches must be types, not type schemes,
115 -- otherwise the order in which we check them would affect the result.
116 zapExpectedBranches (MatchGroup [match] _) exp_ty
117 = return exp_ty -- One branch
118 zapExpectedBranches matches (Check ty)
120 zapExpectedBranches matches (Infer hole)
121 = do { -- Many branches, and inference mode,
122 -- so switch to checking mode with a monotype
123 ty <- newTyFlexiVarTy openTypeKind
124 ; writeMutVar hole ty
125 ; return (Check ty) }
127 zapExpectedTo :: Expected TcType -> TcTauType -> TcM ()
128 zapExpectedTo (Check ty1) ty2 = unifyTauTy ty1 ty2
129 zapExpectedTo (Infer hole) ty2 = do { ty2' <- zonkTcType ty2; writeMutVar hole ty2' }
130 -- See Note [Zonk return type]
132 instance Outputable ty => Outputable (Expected ty) where
133 ppr (Check ty) = ptext SLIT("Expected type") <+> ppr ty
134 ppr (Infer hole) = ptext SLIT("Inferring type")
138 %************************************************************************
140 \subsection[Unify-fun]{@unifyFunTy@}
142 %************************************************************************
144 @subFunTy@ and @unifyFunTy@ is used to avoid the fruitless
145 creation of type variables.
147 * subFunTy is used when we might be faced with a "hole" type variable,
148 in which case we should create two new holes.
150 * unifyFunTy is used when we expect to encounter only "ordinary"
151 type variables, so we should create new ordinary type variables
154 subFunTys :: HsMatchContext Name
156 -> Expected TcRhoType -- Fail if ty isn't a function type
157 -> ([Expected TcRhoType] -> Expected TcRhoType -> TcM a)
160 subFunTys ctxt (MatchGroup (match:null_matches) _) (Infer hole) thing_inside
161 = -- This is the interesting case
162 ASSERT( null null_matches )
163 do { pat_holes <- mapM (\ _ -> newHole) (hsLMatchPats match)
164 ; res_hole <- newHole
167 ; res <- thing_inside (map Infer pat_holes) (Infer res_hole)
169 -- Extract the answers
170 ; arg_tys <- mapM readMutVar pat_holes
171 ; res_ty <- readMutVar res_hole
173 -- Write the answer into the incoming hole
174 ; writeMutVar hole (mkFunTys arg_tys res_ty)
176 -- And return the answer
179 subFunTys ctxt group@(MatchGroup (match:matches) _) (Check ty) thing_inside
180 = ASSERT( all ((== n_pats) . length . hsLMatchPats) matches )
181 -- Assertion just checks that all the matches have the same number of pats
182 do { (pat_tys, res_ty) <- unifyFunTys msg n_pats ty
183 ; thing_inside (map Check pat_tys) (Check res_ty) }
185 n_pats = length (hsLMatchPats match)
187 FunRhs fun -> ptext SLIT("The equation(s) for") <+> quotes (ppr fun)
188 <+> ptext SLIT("have") <+> speakNOf n_pats (ptext SLIT("argument"))
189 LambdaExpr -> sep [ ptext SLIT("The lambda expression")
190 <+> quotes (pprSetDepth 1 $ pprMatches ctxt group),
191 -- The pprSetDepth makes the abstraction print briefly
192 ptext SLIT("has") <+> speakNOf n_pats (ptext SLIT("arguments"))]
193 other -> pprPanic "subFunTys" (pprMatchContext ctxt)
196 unifyFunTys :: SDoc -> Arity -> TcRhoType -> TcM ([TcSigmaType], TcRhoType)
197 -- Fail if ty isn't a function type, otherwise return arg and result types
198 -- The result types are guaranteed wobbly if the argument is wobbly
200 -- Does not allocate unnecessary meta variables: if the input already is
201 -- a function, we just take it apart. Not only is this efficient, it's important
202 -- for (a) higher rank: the argument might be of form
203 -- (forall a. ty) -> other
204 -- If allocated (fresh-meta-var1 -> fresh-meta-var2) and unified, we'd
205 -- blow up with the meta var meets the forall
207 -- (b) GADTs: if the argument is not wobbly we do not want the result to be
210 Error messages from unifyFunTys
211 The first line is passed in as error_herald
213 The abstraction `\Just 1 -> ...' has two arguments
214 but its type `Maybe a -> a' has only one
216 The equation(s) for `f' have two arguments
217 but its type `Maybe a -> a' has only one
219 The section `(f 3)' requires 'f' to take two arguments
220 but its type `Int -> Int' has only one
222 The function 'f' is applied to two arguments
223 but its type `Int -> Int' has only one
226 unifyFunTys error_herald arity ty
227 -- error_herald is the whole first line of the error message above
228 = do { (ok, args, res) <- unify_fun_ty True arity ty
229 ; if ok then return (args, res)
230 else failWithTc (mk_msg (length args)) }
233 = error_herald <> comma $$
234 sep [ptext SLIT("but its type") <+> quotes (pprType ty),
235 if n_actual == 0 then ptext SLIT("has none")
236 else ptext SLIT("has only") <+> speakN n_actual]
238 unify_fun_ty :: Bool -> Arity -> TcRhoType
239 -> TcM (Bool, -- Arity satisfied?
240 [TcSigmaType], -- Arg types found; length <= arity
241 TcRhoType) -- Result type
243 unify_fun_ty use_refinement arity ty
245 = do { res_ty <- wobblify use_refinement ty
246 ; return (True, [], ty) }
248 unify_fun_ty use_refinement arity (NoteTy _ ty)
249 = unify_fun_ty use_refinement arity ty
251 unify_fun_ty use_refinement arity ty@(TyVarTy tv)
252 = do { details <- condLookupTcTyVar use_refinement tv
254 IndirectTv use' ty' -> unify_fun_ty use' arity ty'
255 DoneTv (MetaTv ref) -> ASSERT( liftedTypeKind `isSubKind` tyVarKind tv )
256 -- The argument to unifyFunTys is always a type
257 -- Occurs check can't happen, of course
258 do { args <- mappM newTyFlexiVarTy (replicate arity argTypeKind)
259 ; res <- newTyFlexiVarTy openTypeKind
260 ; writeMutVar ref (Indirect (mkFunTys args res))
261 ; return (True, args, res) }
262 DoneTv skol -> return (False, [], ty)
265 unify_fun_ty use_refinement arity ty
266 | Just (arg,res) <- tcSplitFunTy_maybe ty
267 = do { arg' <- wobblify use_refinement arg
268 ; (ok, args', res') <- unify_fun_ty use_refinement (arity-1) res
269 ; return (ok, arg':args', res') }
271 unify_fun_ty use_refinement arity ty
272 -- Common cases are all done by now
273 -- At this point we usually have an error, but ty could
274 -- be (a Int Bool), or (a Bool), which can match
275 -- So just use the unifier. But catch any error so we just
276 -- return the success/fail boolean
277 = do { arg <- newTyFlexiVarTy argTypeKind
278 ; res <- newTyFlexiVarTy openTypeKind
279 ; let fun_ty = mkFunTy arg res
280 ; (_, mb_unit) <- tryTc (uTys True ty ty True fun_ty fun_ty)
282 Nothing -> return (False, [], ty) ;
284 do { (ok, args', res') <- unify_fun_ty use_refinement (arity-1) res
285 ; return (ok, arg:args', res')
290 ----------------------
291 zapToTyConApp :: TyCon -- T :: k1 -> ... -> kn -> *
292 -> Expected TcSigmaType -- Expected type (T a b c)
293 -> TcM [TcType] -- Element types, a b c
294 -- Insists that the Expected type is not a forall-type
295 -- It's used for wired-in tycons, so we call checkWiredInTyCOn
296 zapToTyConApp tc (Check ty)
297 = do { checkWiredInTyCon tc ; unifyTyConApp tc ty } -- NB: fails for a forall-type
299 zapToTyConApp tc (Infer hole)
300 = do { (tc_app, elt_tys) <- newTyConApp tc
301 ; writeMutVar hole tc_app
302 ; traceTc (text "zap" <+> ppr tc)
303 ; checkWiredInTyCon tc
306 zapToListTy :: Expected TcType -> TcM TcType -- Special case for lists
307 zapToListTy exp_ty = do { [elt_ty] <- zapToTyConApp listTyCon exp_ty
310 ----------------------
311 unifyTyConApp :: TyCon -> TcType -> TcM [TcType]
312 unifyTyConApp tc ty = unify_tc_app True tc ty
313 -- Add a boolean flag to remember whether to use
314 -- the type refinement or not
316 unifyListTy :: TcType -> TcM TcType -- Special case for lists
317 unifyListTy exp_ty = do { [elt_ty] <- unifyTyConApp listTyCon exp_ty
321 unify_tc_app use_refinement tc (NoteTy _ ty)
322 = unify_tc_app use_refinement tc ty
324 unify_tc_app use_refinement tc ty@(TyVarTy tyvar)
325 = do { details <- condLookupTcTyVar use_refinement tyvar
327 IndirectTv use' ty' -> unify_tc_app use' tc ty'
328 other -> unify_tc_app_help tc ty
331 unify_tc_app use_refinement tc ty
332 | Just (tycon, arg_tys) <- tcSplitTyConApp_maybe ty,
334 = ASSERT( tyConArity tycon == length arg_tys ) -- ty::*
335 mapM (wobblify use_refinement) arg_tys
337 unify_tc_app use_refinement tc ty = unify_tc_app_help tc ty
339 unify_tc_app_help tc ty -- Revert to ordinary unification
340 = do { (tc_app, arg_tys) <- newTyConApp tc
341 ; if not (isTauTy ty) then -- Can happen if we call zapToTyConApp tc (forall a. ty)
342 unifyMisMatch ty tc_app
344 { unifyTauTy ty tc_app
345 ; returnM arg_tys } }
348 ----------------------
349 unifyAppTy :: TcType -- Type to split: m a
350 -> TcM (TcType, TcType) -- (m,a)
353 unifyAppTy ty = unify_app_ty True ty
355 unify_app_ty use (NoteTy _ ty) = unify_app_ty use ty
357 unify_app_ty use ty@(TyVarTy tyvar)
358 = do { details <- condLookupTcTyVar use tyvar
360 IndirectTv use' ty' -> unify_app_ty use' ty'
361 other -> unify_app_ty_help ty
365 | Just (fun_ty, arg_ty) <- tcSplitAppTy_maybe ty
366 = do { fun' <- wobblify use fun_ty
367 ; arg' <- wobblify use arg_ty
368 ; return (fun', arg') }
370 | otherwise = unify_app_ty_help ty
372 unify_app_ty_help ty -- Revert to ordinary unification
373 = do { fun_ty <- newTyFlexiVarTy (mkArrowKind liftedTypeKind liftedTypeKind)
374 ; arg_ty <- newTyFlexiVarTy liftedTypeKind
375 ; unifyTauTy (mkAppTy fun_ty arg_ty) ty
376 ; return (fun_ty, arg_ty) }
379 ----------------------
380 wobblify :: Bool -- True <=> don't wobblify
383 -- Return a wobbly type. At the moment we do that by
384 -- allocating a fresh meta type variable.
385 wobblify True ty = return ty
386 wobblify False ty = do { uniq <- newUnique
387 ; tv <- newMetaTyVar (mkSysTvName uniq FSLIT("w"))
390 ; return (mkTyVarTy tv) }
392 ----------------------
393 newTyConApp :: TyCon -> TcM (TcTauType, [TcTauType])
394 newTyConApp tc = do { (tvs, args, _) <- tcInstTyVars (tyConTyVars tc)
395 ; return (mkTyConApp tc args, args) }
399 %************************************************************************
401 \subsection{Subsumption}
403 %************************************************************************
405 All the tcSub calls have the form
407 tcSub expected_ty offered_ty
409 offered_ty <= expected_ty
411 That is, that a value of type offered_ty is acceptable in
412 a place expecting a value of type expected_ty.
414 It returns a coercion function
415 co_fn :: offered_ty -> expected_ty
416 which takes an HsExpr of type offered_ty into one of type
420 -----------------------
421 -- tcSubExp is used for expressions
422 tcSubExp :: Expected TcRhoType -> TcRhoType -> TcM ExprCoFn
424 tcSubExp (Infer hole) offered_ty
425 = do { offered' <- zonkTcType offered_ty
426 -- Note [Zonk return type]
427 -- zonk to take advantage of the current GADT type refinement.
428 -- If we don't we get spurious "existential type variable escapes":
429 -- case (x::Maybe a) of
430 -- Just b (y::b) -> y
431 -- We need the refinement [b->a] to be applied to the result type
432 ; writeMutVar hole offered'
433 ; return idCoercion }
435 tcSubExp (Check expected_ty) offered_ty
436 = tcSub expected_ty offered_ty
438 -----------------------
439 -- tcSubPat is used for patterns
440 tcSubPat :: TcSigmaType -- Pattern type signature
441 -> Expected TcSigmaType -- Type from context
443 -- In patterns we insist on an exact match; hence no CoFn returned
444 -- See Note [Pattern coercions] in TcPat
445 -- However, we can't call unify directly, because both types might be
446 -- polymorphic; hence the call to tcSub, followed by a check for
447 -- the identity coercion
449 tcSubPat sig_ty (Infer hole)
450 = do { sig_ty' <- zonkTcType sig_ty
451 ; writeMutVar hole sig_ty' -- See notes with tcSubExp above
454 tcSubPat sig_ty (Check exp_ty)
455 = do { co_fn <- tcSub sig_ty exp_ty
457 ; if isIdCoercion co_fn then
460 unifyMisMatch sig_ty exp_ty }
465 %************************************************************************
467 tcSub: main subsumption-check code
469 %************************************************************************
471 No holes expected now. Add some error-check context info.
475 tcSub :: TcSigmaType -> TcSigmaType -> TcM ExprCoFn -- Locally used only
476 -- tcSub exp act checks that
478 tcSub expected_ty actual_ty
479 = traceTc (text "tcSub" <+> details) `thenM_`
480 addErrCtxtM (unifyCtxt "type" expected_ty actual_ty)
481 (tc_sub expected_ty expected_ty actual_ty actual_ty)
483 details = vcat [text "Expected:" <+> ppr expected_ty,
484 text "Actual: " <+> ppr actual_ty]
487 tc_sub :: TcSigmaType -- expected_ty, before expanding synonyms
488 -> TcSigmaType -- ..and after
489 -> TcSigmaType -- actual_ty, before
490 -> TcSigmaType -- ..and after
493 -----------------------------------
495 tc_sub exp_sty (NoteTy _ exp_ty) act_sty act_ty = tc_sub exp_sty exp_ty act_sty act_ty
496 tc_sub exp_sty exp_ty act_sty (NoteTy _ act_ty) = tc_sub exp_sty exp_ty act_sty act_ty
498 -----------------------------------
499 -- Generalisation case
500 -- actual_ty: d:Eq b => b->b
501 -- expected_ty: forall a. Ord a => a->a
502 -- co_fn e /\a. \d2:Ord a. let d = eqFromOrd d2 in e
504 -- It is essential to do this *before* the specialisation case
505 -- Example: f :: (Eq a => a->a) -> ...
506 -- g :: Ord b => b->b
509 tc_sub exp_sty expected_ty act_sty actual_ty
510 | isSigmaTy expected_ty
511 = tcGen expected_ty (tyVarsOfType actual_ty) (
512 -- It's really important to check for escape wrt the free vars of
513 -- both expected_ty *and* actual_ty
514 \ body_exp_ty -> tc_sub body_exp_ty body_exp_ty act_sty actual_ty
515 ) `thenM` \ (gen_fn, co_fn) ->
516 returnM (gen_fn <.> co_fn)
518 -----------------------------------
519 -- Specialisation case:
520 -- actual_ty: forall a. Ord a => a->a
521 -- expected_ty: Int -> Int
522 -- co_fn e = e Int dOrdInt
524 tc_sub exp_sty expected_ty act_sty actual_ty
525 | isSigmaTy actual_ty
526 = tcInstCall InstSigOrigin actual_ty `thenM` \ (inst_fn, _, body_ty) ->
527 tc_sub exp_sty expected_ty body_ty body_ty `thenM` \ co_fn ->
528 returnM (co_fn <.> inst_fn)
530 -----------------------------------
533 tc_sub _ (FunTy exp_arg exp_res) _ (FunTy act_arg act_res)
534 = tcSub_fun exp_arg exp_res act_arg act_res
536 -----------------------------------
537 -- Type variable meets function: imitate
539 -- NB 1: we can't just unify the type variable with the type
540 -- because the type might not be a tau-type, and we aren't
541 -- allowed to instantiate an ordinary type variable with
544 -- NB 2: can we short-cut to an error case?
545 -- when the arg/res is not a tau-type?
546 -- NO! e.g. f :: ((forall a. a->a) -> Int) -> Int
548 -- is perfectly fine, because we can instantiate f's type to a monotype
550 -- However, we get can get jolly unhelpful error messages.
551 -- e.g. foo = id runST
553 -- Inferred type is less polymorphic than expected
554 -- Quantified type variable `s' escapes
555 -- Expected type: ST s a -> t
556 -- Inferred type: (forall s1. ST s1 a) -> a
557 -- In the first argument of `id', namely `runST'
558 -- In a right-hand side of function `foo': id runST
560 -- I'm not quite sure what to do about this!
562 tc_sub exp_sty exp_ty@(FunTy exp_arg exp_res) _ act_ty
563 = do { (act_arg, act_res) <- unify_fun act_ty
564 ; tcSub_fun exp_arg exp_res act_arg act_res }
566 tc_sub _ exp_ty act_sty act_ty@(FunTy act_arg act_res)
567 = do { (exp_arg, exp_res) <- unify_fun exp_ty
568 ; tcSub_fun exp_arg exp_res act_arg act_res }
570 -----------------------------------
572 -- If none of the above match, we revert to the plain unifier
573 tc_sub exp_sty expected_ty act_sty actual_ty
574 = uTys True exp_sty expected_ty True act_sty actual_ty `thenM_`
577 -----------------------------------
578 -- A helper to make a function type match
579 -- The error message isn't very good, but that's a problem with
580 -- all of this subsumption code
582 = do { (ok, args, res) <- unify_fun_ty True 1 ty
583 ; if ok then return (head args, res)
584 else failWithTc (ptext SLIT("Expecting a function type, but found") <+> quotes (ppr ty))}
588 tcSub_fun exp_arg exp_res act_arg act_res
589 = tc_sub act_arg act_arg exp_arg exp_arg `thenM` \ co_fn_arg ->
590 tc_sub exp_res exp_res act_res act_res `thenM` \ co_fn_res ->
591 newUnique `thenM` \ uniq ->
593 -- co_fn_arg :: HsExpr exp_arg -> HsExpr act_arg
594 -- co_fn_res :: HsExpr act_res -> HsExpr exp_res
595 -- co_fn :: HsExpr (act_arg -> act_res) -> HsExpr (exp_arg -> exp_res)
596 arg_id = mkSysLocal FSLIT("sub") uniq exp_arg
597 coercion | isIdCoercion co_fn_arg,
598 isIdCoercion co_fn_res = idCoercion
599 | otherwise = mkCoercion co_fn
601 co_fn e = DictLam [arg_id]
602 (noLoc (co_fn_res <$> (HsApp (noLoc e) (noLoc (co_fn_arg <$> HsVar arg_id)))))
603 -- Slight hack; using a "DictLam" to get an ordinary simple lambda
604 -- HsVar arg_id :: HsExpr exp_arg
605 -- co_fn_arg $it :: HsExpr act_arg
606 -- HsApp e $it :: HsExpr act_res
607 -- co_fn_res $it :: HsExpr exp_res
613 %************************************************************************
615 \subsection{Generalisation}
617 %************************************************************************
620 tcGen :: TcSigmaType -- expected_ty
621 -> TcTyVarSet -- Extra tyvars that the universally
622 -- quantified tyvars of expected_ty
623 -- must not be unified
624 -> (TcRhoType -> TcM result) -- spec_ty
625 -> TcM (ExprCoFn, result)
626 -- The expression has type: spec_ty -> expected_ty
628 tcGen expected_ty extra_tvs thing_inside -- We expect expected_ty to be a forall-type
629 -- If not, the call is a no-op
630 = do { -- We want the GenSkol info in the skolemised type variables to
631 -- mention the *instantiated* tyvar names, so that we get a
632 -- good error message "Rigid variable 'a' is bound by (forall a. a->a)"
633 -- Hence the tiresome but innocuous fixM
634 ((forall_tvs, theta, rho_ty), skol_info) <- fixM (\ ~(_, skol_info) ->
635 do { (forall_tvs, theta, rho_ty) <- tcSkolType skol_info expected_ty
636 ; span <- getSrcSpanM
637 ; let skol_info = GenSkol forall_tvs (mkPhiTy theta rho_ty) span
638 ; return ((forall_tvs, theta, rho_ty), skol_info) })
641 ; traceTc (text "tcGen" <+> vcat [text "extra_tvs" <+> ppr extra_tvs,
642 text "expected_ty" <+> ppr expected_ty,
643 text "inst ty" <+> ppr forall_tvs <+> ppr theta <+> ppr rho_ty,
644 text "free_tvs" <+> ppr free_tvs,
645 text "forall_tvs" <+> ppr forall_tvs])
648 -- Type-check the arg and unify with poly type
649 ; (result, lie) <- getLIE (thing_inside rho_ty)
651 -- Check that the "forall_tvs" havn't been constrained
652 -- The interesting bit here is that we must include the free variables
653 -- of the expected_ty. Here's an example:
654 -- runST (newVar True)
655 -- Here, if we don't make a check, we'll get a type (ST s (MutVar s Bool))
656 -- for (newVar True), with s fresh. Then we unify with the runST's arg type
657 -- forall s'. ST s' a. That unifies s' with s, and a with MutVar s Bool.
658 -- So now s' isn't unconstrained because it's linked to a.
659 -- Conclusion: include the free vars of the expected_ty in the
660 -- list of "free vars" for the signature check.
662 ; dicts <- newDicts (SigOrigin skol_info) theta
663 ; inst_binds <- tcSimplifyCheck sig_msg forall_tvs dicts lie
665 ; checkSigTyVarsWrt free_tvs forall_tvs
666 ; traceTc (text "tcGen:done")
669 -- This HsLet binds any Insts which came out of the simplification.
670 -- It's a bit out of place here, but using AbsBind involves inventing
671 -- a couple of new names which seems worse.
672 dict_ids = map instToId dicts
673 co_fn e = TyLam forall_tvs (mkHsDictLam dict_ids (mkHsDictLet inst_binds (noLoc e)))
674 ; returnM (mkCoercion co_fn, result) }
676 free_tvs = tyVarsOfType expected_ty `unionVarSet` extra_tvs
677 sig_msg = ptext SLIT("expected type of an expression")
682 %************************************************************************
684 \subsection[Unify-exported]{Exported unification functions}
686 %************************************************************************
688 The exported functions are all defined as versions of some
689 non-exported generic functions.
691 Unify two @TauType@s. Dead straightforward.
694 unifyTauTy :: TcTauType -> TcTauType -> TcM ()
695 unifyTauTy ty1 ty2 -- ty1 expected, ty2 inferred
696 = -- The unifier should only ever see tau-types
697 -- (no quantification whatsoever)
698 ASSERT2( isTauTy ty1, ppr ty1 )
699 ASSERT2( isTauTy ty2, ppr ty2 )
700 addErrCtxtM (unifyCtxt "type" ty1 ty2) $
701 uTys True ty1 ty1 True ty2 ty2
703 unifyTheta :: TcThetaType -> TcThetaType -> TcM ()
704 unifyTheta theta1 theta2
705 = do { checkTc (equalLength theta1 theta2)
706 (ptext SLIT("Contexts differ in length"))
707 ; unifyTauTyLists True (map mkPredTy theta1) True (map mkPredTy theta2) }
710 @unifyTauTyList@ unifies corresponding elements of two lists of
711 @TauType@s. It uses @uTys@ to do the real work. The lists should be
712 of equal length. We charge down the list explicitly so that we can
713 complain if their lengths differ.
716 unifyTauTyLists :: Bool -> -- Allow refinements on tys1
718 Bool -> -- Allow refinements on tys2
719 [TcTauType] -> TcM ()
720 -- Precondition: lists must be same length
721 -- Having the caller check gives better error messages
722 -- Actually the caller neve does need to check; see Note [Tycon app]
723 unifyTauTyLists r1 [] r2 [] = returnM ()
724 unifyTauTyLists r1 (ty1:tys1) r2 (ty2:tys2) = uTys r1 ty1 ty1 r2 ty2 ty2 `thenM_`
725 unifyTauTyLists r1 tys1 r2 tys2
726 unifyTauTyLists r1 ty1s r2 ty2s = panic "Unify.unifyTauTyLists: mismatched type lists!"
729 @unifyTauTyList@ takes a single list of @TauType@s and unifies them
730 all together. It is used, for example, when typechecking explicit
731 lists, when all the elts should be of the same type.
734 unifyTauTyList :: [TcTauType] -> TcM ()
735 unifyTauTyList [] = returnM ()
736 unifyTauTyList [ty] = returnM ()
737 unifyTauTyList (ty1:tys@(ty2:_)) = unifyTauTy ty1 ty2 `thenM_`
741 %************************************************************************
743 \subsection[Unify-uTys]{@uTys@: getting down to business}
745 %************************************************************************
747 @uTys@ is the heart of the unifier. Each arg happens twice, because
748 we want to report errors in terms of synomyms if poss. The first of
749 the pair is used in error messages only; it is always the same as the
750 second, except that if the first is a synonym then the second may be a
751 de-synonym'd version. This way we get better error messages.
753 We call the first one \tr{ps_ty1}, \tr{ps_ty2} for ``possible synomym''.
756 uTys :: Bool -- Allow refinements to ty1
757 -> TcTauType -> TcTauType -- Error reporting ty1 and real ty1
758 -- ty1 is the *expected* type
759 -> Bool -- Allow refinements to ty2
760 -> TcTauType -> TcTauType -- Error reporting ty2 and real ty2
761 -- ty2 is the *actual* type
764 -- Always expand synonyms (see notes at end)
765 -- (this also throws away FTVs)
766 uTys r1 ps_ty1 (NoteTy n1 ty1) r2 ps_ty2 ty2 = uTys r1 ps_ty1 ty1 r2 ps_ty2 ty2
767 uTys r1 ps_ty1 ty1 r2 ps_ty2 (NoteTy n2 ty2) = uTys r1 ps_ty1 ty1 r2 ps_ty2 ty2
769 -- Variables; go for uVar
770 uTys r1 ps_ty1 (TyVarTy tyvar1) r2 ps_ty2 ty2 = uVar False r1 tyvar1 r2 ps_ty2 ty2
771 uTys r1 ps_ty1 ty1 r2 ps_ty2 (TyVarTy tyvar2) = uVar True r2 tyvar2 r1 ps_ty1 ty1
772 -- "True" means args swapped
775 uTys r1 _ (PredTy (IParam n1 t1)) r2 _ (PredTy (IParam n2 t2))
776 | n1 == n2 = uTys r1 t1 t1 r2 t2 t2
777 uTys r1 _ (PredTy (ClassP c1 tys1)) r2 _ (PredTy (ClassP c2 tys2))
778 | c1 == c2 = unifyTauTyLists r1 tys1 r2 tys2
779 -- Guaranteed equal lengths because the kinds check
781 -- Functions; just check the two parts
782 uTys r1 _ (FunTy fun1 arg1) r2 _ (FunTy fun2 arg2)
783 = uTys r1 fun1 fun1 r2 fun2 fun2 `thenM_` uTys r1 arg1 arg1 r2 arg2 arg2
785 -- Type constructors must match
786 uTys r1 ps_ty1 (TyConApp con1 tys1) r2 ps_ty2 (TyConApp con2 tys2)
787 | con1 == con2 = unifyTauTyLists r1 tys1 r2 tys2
788 -- See Note [TyCon app]
790 -- Applications need a bit of care!
791 -- They can match FunTy and TyConApp, so use splitAppTy_maybe
792 -- NB: we've already dealt with type variables and Notes,
793 -- so if one type is an App the other one jolly well better be too
794 uTys r1 ps_ty1 (AppTy s1 t1) r2 ps_ty2 ty2
795 = case tcSplitAppTy_maybe ty2 of
796 Just (s2,t2) -> uTys r1 s1 s1 r2 s2 s2 `thenM_` uTys r1 t1 t1 r2 t2 t2
797 Nothing -> unifyMisMatch ps_ty1 ps_ty2
799 -- Now the same, but the other way round
800 -- Don't swap the types, because the error messages get worse
801 uTys r1 ps_ty1 ty1 r2 ps_ty2 (AppTy s2 t2)
802 = case tcSplitAppTy_maybe ty1 of
803 Just (s1,t1) -> uTys r1 s1 s1 r2 s2 s2 `thenM_` uTys r1 t1 t1 r2 t2 t2
804 Nothing -> unifyMisMatch ps_ty1 ps_ty2
806 -- Not expecting for-alls in unification
807 -- ... but the error message from the unifyMisMatch more informative
808 -- than a panic message!
810 -- Anything else fails
811 uTys r1 ps_ty1 ty1 r2 ps_ty2 ty2 = unifyMisMatch ps_ty1 ps_ty2
816 When we find two TyConApps, the argument lists are guaranteed equal
817 length. Reason: intially the kinds of the two types to be unified is
818 the same. The only way it can become not the same is when unifying two
819 AppTys (f1 a1):=:(f2 a2). In that case there can't be a TyConApp in
820 the f1,f2 (because it'd absorb the app). If we unify f1:=:f2 first,
821 which we do, that ensures that f1,f2 have the same kind; and that
822 means a1,a2 have the same kind. And now the argument repeats.
827 If you are tempted to make a short cut on synonyms, as in this
831 -- NO uTys (SynTy con1 args1 ty1) (SynTy con2 args2 ty2)
832 -- NO = if (con1 == con2) then
833 -- NO -- Good news! Same synonym constructors, so we can shortcut
834 -- NO -- by unifying their arguments and ignoring their expansions.
835 -- NO unifyTauTypeLists args1 args2
837 -- NO -- Never mind. Just expand them and try again
841 then THINK AGAIN. Here is the whole story, as detected and reported
842 by Chris Okasaki \tr{<Chris_Okasaki@loch.mess.cs.cmu.edu>}:
844 Here's a test program that should detect the problem:
848 x = (1 :: Bogus Char) :: Bogus Bool
851 The problem with [the attempted shortcut code] is that
855 is not a sufficient condition to be able to use the shortcut!
856 You also need to know that the type synonym actually USES all
857 its arguments. For example, consider the following type synonym
858 which does not use all its arguments.
863 If you ever tried unifying, say, \tr{Bogus Char} with \tr{Bogus Bool},
864 the unifier would blithely try to unify \tr{Char} with \tr{Bool} and
865 would fail, even though the expanded forms (both \tr{Int}) should
868 Similarly, unifying \tr{Bogus Char} with \tr{Bogus t} would
869 unnecessarily bind \tr{t} to \tr{Char}.
871 ... You could explicitly test for the problem synonyms and mark them
872 somehow as needing expansion, perhaps also issuing a warning to the
877 %************************************************************************
879 \subsection[Unify-uVar]{@uVar@: unifying with a type variable}
881 %************************************************************************
883 @uVar@ is called when at least one of the types being unified is a
884 variable. It does {\em not} assume that the variable is a fixed point
885 of the substitution; rather, notice that @uVar@ (defined below) nips
886 back into @uTys@ if it turns out that the variable is already bound.
889 uVar :: Bool -- False => tyvar is the "expected"
890 -- True => ty is the "expected" thing
891 -> Bool -- True, allow refinements to tv1, False don't
893 -> Bool -- Allow refinements to ty2?
894 -> TcTauType -> TcTauType -- printing and real versions
897 uVar swapped r1 tv1 r2 ps_ty2 ty2
898 = traceTc (text "uVar" <+> ppr swapped <+> ppr tv1 <+> (ppr ps_ty2 $$ ppr ty2)) `thenM_`
899 condLookupTcTyVar r1 tv1 `thenM` \ details ->
901 IndirectTv r1' ty1 | swapped -> uTys r2 ps_ty2 ty2 r1' ty1 ty1 -- Swap back
902 | otherwise -> uTys r1' ty1 ty1 r2 ps_ty2 ty2 -- Same order
903 DoneTv details1 -> uDoneVar swapped tv1 details1 r2 ps_ty2 ty2
906 uDoneVar :: Bool -- Args are swapped
907 -> TcTyVar -> TcTyVarDetails -- Tyvar 1
908 -> Bool -- Allow refinements to ty2
909 -> TcTauType -> TcTauType -- Type 2
911 -- Invariant: tyvar 1 is not unified with anything
913 uDoneVar swapped tv1 details1 r2 ps_ty2 (NoteTy n2 ty2)
914 = -- Expand synonyms; ignore FTVs
915 uDoneVar swapped tv1 details1 r2 ps_ty2 ty2
917 uDoneVar swapped tv1 details1 r2 ps_ty2 ty2@(TyVarTy tv2)
918 -- Same type variable => no-op
922 -- Distinct type variables
924 = do { lookup2 <- condLookupTcTyVar r2 tv2
926 IndirectTv b ty2' -> uDoneVar swapped tv1 details1 b ty2' ty2'
927 DoneTv details2 -> uDoneVars swapped tv1 details1 tv2 details2
930 uDoneVar swapped tv1 details1 r2 ps_ty2 non_var_ty2 -- ty2 is not a type variable
932 MetaTv ref1 -> do { -- Do the occurs check, and check that we are not
933 -- unifying a type variable with a polytype
934 -- Returns a zonked type ready for the update
935 ty2 <- checkValue tv1 r2 ps_ty2 non_var_ty2
936 ; updateMeta swapped tv1 ref1 ty2 }
938 skolem_details -> unifyMisMatch (TyVarTy tv1) ps_ty2
942 uDoneVars :: Bool -- Args are swapped
943 -> TcTyVar -> TcTyVarDetails -- Tyvar 1
944 -> TcTyVar -> TcTyVarDetails -- Tyvar 2
946 -- Invarant: the type variables are distinct,
947 -- and are not already unified with anything
949 uDoneVars swapped tv1 (MetaTv ref1) tv2 details2
951 MetaTv ref2 | update_tv2 -> updateMeta (not swapped) tv2 ref2 (mkTyVarTy tv1)
952 other -> updateMeta swapped tv1 ref1 (mkTyVarTy tv2)
953 -- Note that updateMeta does a sub-kind check
954 -- We might unify (a b) with (c d) where b::*->* and d::*; this should fail
958 update_tv2 = k1 `isSubKind` k2 && (k1 /= k2 || nicer_to_update_tv2)
959 -- Update the variable with least kind info
960 -- See notes on type inference in Kind.lhs
961 -- The "nicer to" part only applies if the two kinds are the same,
962 -- so we can choose which to do.
964 nicer_to_update_tv2 = isSystemName (varName tv2)
965 -- Try to update sys-y type variables in preference to ones
966 -- gotten (say) by instantiating a polymorphic function with
967 -- a user-written type sig
969 uDoneVars swapped tv1 (SkolemTv _) tv2 details2
971 MetaTv ref2 -> updateMeta (not swapped) tv2 ref2 (mkTyVarTy tv1)
972 other -> unifyMisMatch (mkTyVarTy tv1) (mkTyVarTy tv2)
974 uDoneVars swapped tv1 (SigSkolTv _ ref1) tv2 details2
976 MetaTv ref2 -> updateMeta (not swapped) tv2 ref2 (mkTyVarTy tv1)
977 SigSkolTv _ _ -> updateMeta swapped tv1 ref1 (mkTyVarTy tv2)
978 other -> unifyMisMatch (mkTyVarTy tv1) (mkTyVarTy tv2)
981 updateMeta :: Bool -> TcTyVar -> IORef MetaDetails -> TcType -> TcM ()
982 -- Update tv1, which is flexi; occurs check is alrady done
983 updateMeta swapped tv1 ref1 ty2
984 = do { checkKinds swapped tv1 ty2
985 ; writeMutVar ref1 (Indirect ty2) }
989 checkKinds swapped tv1 ty2
990 -- We're about to unify a type variable tv1 with a non-tyvar-type ty2.
991 -- ty2 has been zonked at this stage, which ensures that
992 -- its kind has as much boxity information visible as possible.
993 | tk2 `isSubKind` tk1 = returnM ()
996 -- Either the kinds aren't compatible
997 -- (can happen if we unify (a b) with (c d))
998 -- or we are unifying a lifted type variable with an
999 -- unlifted type: e.g. (id 3#) is illegal
1000 = addErrCtxtM (unifyKindCtxt swapped tv1 ty2) $
1001 unifyKindMisMatch k1 k2
1003 (k1,k2) | swapped = (tk2,tk1)
1004 | otherwise = (tk1,tk2)
1010 checkValue tv1 r2 ps_ty2 non_var_ty2
1011 -- Do the occurs check, and check that we are not
1012 -- unifying a type variable with a polytype
1013 -- Return the type to update the type variable with, or fail
1015 -- Basically we want to update tv1 := ps_ty2
1016 -- because ps_ty2 has type-synonym info, which improves later error messages
1021 -- f :: (A a -> a -> ()) -> ()
1025 -- x = f (\ x p -> p x)
1027 -- In the application (p x), we try to match "t" with "A t". If we go
1028 -- ahead and bind t to A t (= ps_ty2), we'll lead the type checker into
1029 -- an infinite loop later.
1030 -- But we should not reject the program, because A t = ().
1031 -- Rather, we should bind t to () (= non_var_ty2).
1033 -- That's why we have this two-state occurs-check
1034 = zonk_tc_type r2 ps_ty2 `thenM` \ ps_ty2' ->
1035 case okToUnifyWith tv1 ps_ty2' of {
1036 Nothing -> returnM ps_ty2' ; -- Success
1039 zonk_tc_type r2 non_var_ty2 `thenM` \ non_var_ty2' ->
1040 case okToUnifyWith tv1 non_var_ty2' of
1041 Nothing -> -- This branch rarely succeeds, except in strange cases
1042 -- like that in the example above
1043 returnM non_var_ty2'
1045 Just problem -> failWithTcM (unifyCheck problem tv1 ps_ty2')
1048 zonk_tc_type refine ty
1049 = zonkType (\tv -> return (TyVarTy tv)) refine ty
1050 -- We may already be inside a wobbly type t2, and
1051 -- should take that into account here
1053 data Problem = OccurCheck | NotMonoType
1055 okToUnifyWith :: TcTyVar -> TcType -> Maybe Problem
1056 -- (okToUnifyWith tv ty) checks whether it's ok to unify
1059 -- Just p => not ok, problem p
1064 ok (TyVarTy tv') | tv == tv' = Just OccurCheck
1065 | otherwise = Nothing
1066 ok (AppTy t1 t2) = ok t1 `and` ok t2
1067 ok (FunTy t1 t2) = ok t1 `and` ok t2
1068 ok (TyConApp _ ts) = oks ts
1069 ok (ForAllTy _ _) = Just NotMonoType
1070 ok (PredTy st) = ok_st st
1071 ok (NoteTy (FTVNote _) t) = ok t
1072 ok (NoteTy (SynNote t1) t2) = ok t1 `and` ok t2
1073 -- Type variables may be free in t1 but not t2
1074 -- A forall may be in t2 but not t1
1076 oks ts = foldr (and . ok) Nothing ts
1078 ok_st (ClassP _ ts) = oks ts
1079 ok_st (IParam _ t) = ok t
1082 Just p `and` m = Just p
1086 %************************************************************************
1090 %************************************************************************
1092 Unifying kinds is much, much simpler than unifying types.
1095 unifyKind :: TcKind -- Expected
1098 unifyKind LiftedTypeKind LiftedTypeKind = returnM ()
1099 unifyKind UnliftedTypeKind UnliftedTypeKind = returnM ()
1101 unifyKind OpenTypeKind k2 | isOpenTypeKind k2 = returnM ()
1102 unifyKind ArgTypeKind k2 | isArgTypeKind k2 = returnM ()
1103 -- Respect sub-kinding
1105 unifyKind (FunKind a1 r1) (FunKind a2 r2)
1106 = do { unifyKind a2 a1; unifyKind r1 r2 }
1107 -- Notice the flip in the argument,
1108 -- so that the sub-kinding works right
1110 unifyKind (KindVar kv1) k2 = uKVar False kv1 k2
1111 unifyKind k1 (KindVar kv2) = uKVar True kv2 k1
1112 unifyKind k1 k2 = unifyKindMisMatch k1 k2
1114 unifyKinds :: [TcKind] -> [TcKind] -> TcM ()
1115 unifyKinds [] [] = returnM ()
1116 unifyKinds (k1:ks1) (k2:ks2) = unifyKind k1 k2 `thenM_`
1118 unifyKinds _ _ = panic "unifyKinds: length mis-match"
1121 uKVar :: Bool -> KindVar -> TcKind -> TcM ()
1122 uKVar swapped kv1 k2
1123 = do { mb_k1 <- readKindVar kv1
1125 Nothing -> uUnboundKVar swapped kv1 k2
1126 Just k1 | swapped -> unifyKind k2 k1
1127 | otherwise -> unifyKind k1 k2 }
1130 uUnboundKVar :: Bool -> KindVar -> TcKind -> TcM ()
1131 uUnboundKVar swapped kv1 k2@(KindVar kv2)
1132 | kv1 == kv2 = returnM ()
1133 | otherwise -- Distinct kind variables
1134 = do { mb_k2 <- readKindVar kv2
1136 Just k2 -> uUnboundKVar swapped kv1 k2
1137 Nothing -> writeKindVar kv1 k2 }
1139 uUnboundKVar swapped kv1 non_var_k2
1140 = do { k2' <- zonkTcKind non_var_k2
1141 ; kindOccurCheck kv1 k2'
1142 ; k2'' <- kindSimpleKind swapped k2'
1143 -- KindVars must be bound only to simple kinds
1144 -- Polarities: (kindSimpleKind True ?) succeeds
1145 -- returning *, corresponding to unifying
1148 ; writeKindVar kv1 k2'' }
1151 kindOccurCheck kv1 k2 -- k2 is zonked
1152 = checkTc (not_in k2) (kindOccurCheckErr kv1 k2)
1154 not_in (KindVar kv2) = kv1 /= kv2
1155 not_in (FunKind a2 r2) = not_in a2 && not_in r2
1158 kindSimpleKind :: Bool -> Kind -> TcM SimpleKind
1159 -- (kindSimpleKind True k) returns a simple kind sk such that sk <: k
1160 -- If the flag is False, it requires k <: sk
1161 -- E.g. kindSimpleKind False ?? = *
1162 -- What about (kv -> *) :=: ?? -> *
1163 kindSimpleKind orig_swapped orig_kind
1164 = go orig_swapped orig_kind
1166 go sw (FunKind k1 k2) = do { k1' <- go (not sw) k1
1168 ; return (FunKind k1' k2') }
1169 go True OpenTypeKind = return liftedTypeKind
1170 go True ArgTypeKind = return liftedTypeKind
1171 go sw LiftedTypeKind = return liftedTypeKind
1172 go sw k@(KindVar _) = return k -- KindVars are always simple
1173 go swapped kind = failWithTc (ptext SLIT("Unexpected kind unification failure:")
1174 <+> ppr orig_swapped <+> ppr orig_kind)
1175 -- I think this can't actually happen
1177 -- T v = MkT v v must be a type
1178 -- T v w = MkT (v -> w) v must not be an umboxed tuple
1181 kindOccurCheckErr tyvar ty
1182 = hang (ptext SLIT("Occurs check: cannot construct the infinite kind:"))
1183 2 (sep [ppr tyvar, char '=', ppr ty])
1185 unifyKindMisMatch ty1 ty2
1186 = zonkTcKind ty1 `thenM` \ ty1' ->
1187 zonkTcKind ty2 `thenM` \ ty2' ->
1189 msg = hang (ptext SLIT("Couldn't match kind"))
1190 2 (sep [quotes (ppr ty1'),
1191 ptext SLIT("against"),
1198 unifyFunKind :: TcKind -> TcM (Maybe (TcKind, TcKind))
1199 -- Like unifyFunTy, but does not fail; instead just returns Nothing
1201 unifyFunKind (KindVar kvar)
1202 = readKindVar kvar `thenM` \ maybe_kind ->
1204 Just fun_kind -> unifyFunKind fun_kind
1205 Nothing -> do { arg_kind <- newKindVar
1206 ; res_kind <- newKindVar
1207 ; writeKindVar kvar (mkArrowKind arg_kind res_kind)
1208 ; returnM (Just (arg_kind,res_kind)) }
1210 unifyFunKind (FunKind arg_kind res_kind) = returnM (Just (arg_kind,res_kind))
1211 unifyFunKind other = returnM Nothing
1214 %************************************************************************
1216 \subsection[Unify-context]{Errors and contexts}
1218 %************************************************************************
1224 unifyCtxt s ty1 ty2 tidy_env -- ty1 expected, ty2 inferred
1225 = zonkTcType ty1 `thenM` \ ty1' ->
1226 zonkTcType ty2 `thenM` \ ty2' ->
1227 returnM (err ty1' ty2')
1229 err ty1 ty2 = (env1,
1232 text "Expected" <+> text s <> colon <+> ppr tidy_ty1,
1233 text "Inferred" <+> text s <> colon <+> ppr tidy_ty2
1236 (env1, [tidy_ty1,tidy_ty2]) = tidyOpenTypes tidy_env [ty1,ty2]
1238 unifyKindCtxt swapped tv1 ty2 tidy_env -- not swapped => tv1 expected, ty2 inferred
1239 -- tv1 and ty2 are zonked already
1242 msg = (env2, ptext SLIT("When matching the kinds of") <+>
1243 sep [quotes pp_expected <+> ptext SLIT("and"), quotes pp_actual])
1245 (pp_expected, pp_actual) | swapped = (pp2, pp1)
1246 | otherwise = (pp1, pp2)
1247 (env1, tv1') = tidyOpenTyVar tidy_env tv1
1248 (env2, ty2') = tidyOpenType env1 ty2
1249 pp1 = ppr tv1' <+> dcolon <+> ppr (tyVarKind tv1)
1250 pp2 = ppr ty2' <+> dcolon <+> ppr (typeKind ty2)
1252 unifyMisMatch ty1 ty2
1253 = do { (env1, pp1, extra1) <- ppr_ty emptyTidyEnv ty1
1254 ; (env2, pp2, extra2) <- ppr_ty env1 ty2
1255 ; let msg = sep [sep [ptext SLIT("Couldn't match") <+> pp1, nest 7 (ptext SLIT("against") <+> pp2)],
1256 nest 2 extra1, nest 2 extra2]
1258 failWithTcM (env2, msg) }
1260 ppr_ty :: TidyEnv -> TcType -> TcM (TidyEnv, SDoc, SDoc)
1262 = do { ty' <- zonkTcType ty
1263 ; let (env1,tidy_ty) = tidyOpenType env ty'
1264 simple_result = (env1, quotes (ppr tidy_ty), empty)
1267 | isSkolemTyVar tv -> return (env2, pp_rigid tv',
1269 | otherwise -> return simple_result
1271 (env2, tv') = tidySkolemTyVar env1 tv
1272 other -> return simple_result }
1274 pp_rigid tv = ptext SLIT("the rigid variable") <+> quotes (ppr tv)
1276 unifyCheck problem tyvar ty
1278 2 (sep [ppr tidy_tyvar, char '=', ppr tidy_ty]))
1280 (env1, tidy_tyvar) = tidyOpenTyVar emptyTidyEnv tyvar
1281 (env2, tidy_ty) = tidyOpenType env1 ty
1283 msg = case problem of
1284 OccurCheck -> ptext SLIT("Occurs check: cannot construct the infinite type:")
1285 NotMonoType -> ptext SLIT("Cannot unify a type variable with a type scheme:")
1289 %************************************************************************
1293 %************************************************************************
1295 ---------------------------
1296 -- We would like to get a decent error message from
1297 -- (a) Under-applied type constructors
1298 -- f :: (Maybe, Maybe)
1299 -- (b) Over-applied type constructors
1300 -- f :: Int x -> Int x
1304 checkExpectedKind :: Outputable a => a -> TcKind -> TcKind -> TcM ()
1305 -- A fancy wrapper for 'unifyKind', which tries
1306 -- to give decent error messages.
1307 checkExpectedKind ty act_kind exp_kind
1308 | act_kind `isSubKind` exp_kind -- Short cut for a very common case
1311 = tryTc (unifyKind exp_kind act_kind) `thenM` \ (_errs, mb_r) ->
1313 Just r -> returnM () ; -- Unification succeeded
1316 -- So there's definitely an error
1317 -- Now to find out what sort
1318 zonkTcKind exp_kind `thenM` \ exp_kind ->
1319 zonkTcKind act_kind `thenM` \ act_kind ->
1321 let (exp_as, _) = splitKindFunTys exp_kind
1322 (act_as, _) = splitKindFunTys act_kind
1323 n_exp_as = length exp_as
1324 n_act_as = length act_as
1326 err | n_exp_as < n_act_as -- E.g. [Maybe]
1327 = quotes (ppr ty) <+> ptext SLIT("is not applied to enough type arguments")
1329 -- Now n_exp_as >= n_act_as. In the next two cases,
1330 -- n_exp_as == 0, and hence so is n_act_as
1331 | isLiftedTypeKind exp_kind && isUnliftedTypeKind act_kind
1332 = ptext SLIT("Expecting a lifted type, but") <+> quotes (ppr ty)
1333 <+> ptext SLIT("is unlifted")
1335 | isUnliftedTypeKind exp_kind && isLiftedTypeKind act_kind
1336 = ptext SLIT("Expecting an unlifted type, but") <+> quotes (ppr ty)
1337 <+> ptext SLIT("is lifted")
1339 | otherwise -- E.g. Monad [Int]
1340 = ptext SLIT("Kind mis-match")
1342 more_info = sep [ ptext SLIT("Expected kind") <+>
1343 quotes (pprKind exp_kind) <> comma,
1344 ptext SLIT("but") <+> quotes (ppr ty) <+>
1345 ptext SLIT("has kind") <+> quotes (pprKind act_kind)]
1347 failWithTc (err $$ more_info)
1351 %************************************************************************
1353 \subsection{Checking signature type variables}
1355 %************************************************************************
1357 @checkSigTyVars@ checks that a set of universally quantified type varaibles
1358 are not mentioned in the environment. In particular:
1360 (a) Not mentioned in the type of a variable in the envt
1361 eg the signature for f in this:
1367 Here, f is forced to be monorphic by the free occurence of x.
1369 (d) Not (unified with another type variable that is) in scope.
1370 eg f x :: (r->r) = (\y->y) :: forall a. a->r
1371 when checking the expression type signature, we find that
1372 even though there is nothing in scope whose type mentions r,
1373 nevertheless the type signature for the expression isn't right.
1375 Another example is in a class or instance declaration:
1377 op :: forall b. a -> b
1379 Here, b gets unified with a
1381 Before doing this, the substitution is applied to the signature type variable.
1384 checkSigTyVars :: [TcTyVar] -> TcM ()
1385 checkSigTyVars sig_tvs = check_sig_tyvars emptyVarSet sig_tvs
1387 checkSigTyVarsWrt :: TcTyVarSet -> [TcTyVar] -> TcM ()
1388 checkSigTyVarsWrt extra_tvs sig_tvs
1389 = zonkTcTyVarsAndFV (varSetElems extra_tvs) `thenM` \ extra_tvs' ->
1390 check_sig_tyvars extra_tvs' sig_tvs
1393 :: TcTyVarSet -- Global type variables. The universally quantified
1394 -- tyvars should not mention any of these
1395 -- Guaranteed already zonked.
1396 -> [TcTyVar] -- Universally-quantified type variables in the signature
1397 -- Guaranteed to be skolems
1399 check_sig_tyvars extra_tvs []
1401 check_sig_tyvars extra_tvs sig_tvs
1402 = ASSERT( all isSkolemTyVar sig_tvs )
1403 do { gbl_tvs <- tcGetGlobalTyVars
1404 ; traceTc (text "check_sig_tyvars" <+> (vcat [text "sig_tys" <+> ppr sig_tvs,
1405 text "gbl_tvs" <+> ppr gbl_tvs,
1406 text "extra_tvs" <+> ppr extra_tvs]))
1408 ; let env_tvs = gbl_tvs `unionVarSet` extra_tvs
1409 ; ifM (any (`elemVarSet` env_tvs) sig_tvs)
1410 (bleatEscapedTvs env_tvs sig_tvs sig_tvs)
1413 bleatEscapedTvs :: TcTyVarSet -- The global tvs
1414 -> [TcTyVar] -- The possibly-escaping type variables
1415 -> [TcTyVar] -- The zonked versions thereof
1417 -- Complain about escaping type variables
1418 -- We pass a list of type variables, at least one of which
1419 -- escapes. The first list contains the original signature type variable,
1420 -- while the second contains the type variable it is unified to (usually itself)
1421 bleatEscapedTvs globals sig_tvs zonked_tvs
1422 = do { (env3, msgs) <- foldlM check (env2, []) (tidy_tvs `zip` tidy_zonked_tvs)
1423 ; failWithTcM (env3, main_msg $$ nest 2 (vcat msgs)) }
1425 (env1, tidy_tvs) = tidyOpenTyVars emptyTidyEnv sig_tvs
1426 (env2, tidy_zonked_tvs) = tidyOpenTyVars env1 zonked_tvs
1428 main_msg = ptext SLIT("Inferred type is less polymorphic than expected")
1430 check (tidy_env, msgs) (sig_tv, zonked_tv)
1431 | not (zonked_tv `elemVarSet` globals) = return (tidy_env, msgs)
1433 = do { (tidy_env1, globs) <- findGlobals (unitVarSet zonked_tv) tidy_env
1434 ; returnM (tidy_env1, escape_msg sig_tv zonked_tv globs : msgs) }
1436 -----------------------
1437 escape_msg sig_tv zonked_tv globs
1439 = vcat [sep [msg, ptext SLIT("is mentioned in the environment:")],
1440 nest 2 (vcat globs)]
1442 = msg <+> ptext SLIT("escapes")
1443 -- Sigh. It's really hard to give a good error message
1444 -- all the time. One bad case is an existential pattern match.
1445 -- We rely on the "When..." context to help.
1447 msg = ptext SLIT("Quantified type variable") <+> quotes (ppr sig_tv) <+> is_bound_to
1449 | sig_tv == zonked_tv = empty
1450 | otherwise = ptext SLIT("is unified with") <+> quotes (ppr zonked_tv) <+> ptext SLIT("which")
1453 These two context are used with checkSigTyVars
1456 sigCtxt :: Id -> [TcTyVar] -> TcThetaType -> TcTauType
1457 -> TidyEnv -> TcM (TidyEnv, Message)
1458 sigCtxt id sig_tvs sig_theta sig_tau tidy_env
1459 = zonkTcType sig_tau `thenM` \ actual_tau ->
1461 (env1, tidy_sig_tvs) = tidyOpenTyVars tidy_env sig_tvs
1462 (env2, tidy_sig_rho) = tidyOpenType env1 (mkPhiTy sig_theta sig_tau)
1463 (env3, tidy_actual_tau) = tidyOpenType env2 actual_tau
1464 sub_msg = vcat [ptext SLIT("Signature type: ") <+> pprType (mkForAllTys tidy_sig_tvs tidy_sig_rho),
1465 ptext SLIT("Type to generalise:") <+> pprType tidy_actual_tau
1467 msg = vcat [ptext SLIT("When trying to generalise the type inferred for") <+> quotes (ppr id),