56ae76492deb3b2a14b7aee832f19218edec44db
[ghc-hetmet.git] / ghc / compiler / typecheck / TcUnify.lhs
1 %
2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
3 %
4 \section{Type subsumption and unification}
5
6 \begin{code}
7 module TcUnify (
8         -- Full-blown subsumption
9   tcSub, tcGen, subFunTy,
10   checkSigTyVars, sigCtxt, sigPatCtxt,
11
12         -- Various unifications
13   unifyTauTy, unifyTauTyList, unifyTauTyLists, 
14   unifyFunTy, unifyListTy, unifyPArrTy, unifyTupleTy,
15   unifyKind, unifyKinds, unifyOpenTypeKind,
16
17         -- Coercions
18   Coercion, ExprCoFn, PatCoFn, 
19   (<$>), (<.>), mkCoercion, 
20   idCoercion, isIdCoercion
21
22   ) where
23
24 #include "HsVersions.h"
25
26
27 import HsSyn            ( HsExpr(..) )
28 import TcHsSyn          ( TypecheckedHsExpr, TcPat, 
29                           mkHsDictApp, mkHsTyApp, mkHsLet )
30 import TypeRep          ( Type(..), SourceType(..),
31                           openKindCon, typeCon )
32
33 import TcMonad          -- TcType, amongst others
34 import TcType           ( TcKind, TcType, TcSigmaType, TcPhiType, TcTyVar, TcTauType,
35                           TcTyVarSet, TcThetaType,
36                           isTauTy, isSigmaTy, 
37                           tcSplitAppTy_maybe, tcSplitTyConApp_maybe, 
38                           tcGetTyVar_maybe, tcGetTyVar, 
39                           mkTyConApp, mkTyVarTys, mkFunTy, tyVarsOfType, mkRhoTy,
40                           typeKind, tcSplitFunTy_maybe, mkForAllTys,
41                           isHoleTyVar, isSkolemTyVar, isUserTyVar, allDistinctTyVars, 
42                           tidyOpenType, tidyOpenTypes, tidyOpenTyVar, tidyOpenTyVars,
43                           eqKind, openTypeKind, liftedTypeKind, unliftedTypeKind, isTypeKind,
44                           hasMoreBoxityInfo, tyVarBindingInfo
45                         )
46 import qualified Type   ( getTyVar_maybe )
47 import Inst             ( LIE, emptyLIE, plusLIE, mkLIE, 
48                           newDicts, instToId
49                         )
50 import TcMType          ( getTcTyVar, putTcTyVar, tcInstType, 
51                           newTyVarTy, newTyVarTys, newBoxityVar, newHoleTyVarTy,
52                           zonkTcType, zonkTcTyVars, zonkTcTyVar )
53 import TcSimplify       ( tcSimplifyCheck )
54 import TysWiredIn       ( listTyCon, parrTyCon, mkListTy, mkPArrTy, mkTupleTy )
55 import TcEnv            ( TcTyThing(..), tcExtendGlobalTyVars, tcGetGlobalTyVars, tcLEnvElts )
56 import TyCon            ( tyConArity, isTupleTyCon, tupleTyConBoxity )
57 import PprType          ( pprType )
58 import CoreFVs          ( idFreeTyVars )
59 import Id               ( mkSysLocal, idType )
60 import Var              ( Var, varName, tyVarKind )
61 import VarSet           ( elemVarSet, varSetElems )
62 import VarEnv
63 import Name             ( isSystemName, getSrcLoc )
64 import ErrUtils         ( Message )
65 import BasicTypes       ( Boxity, Arity, isBoxed )
66 import Util             ( isSingleton, equalLength )
67 import Maybe            ( isNothing )
68 import Outputable
69 \end{code}
70
71
72 %************************************************************************
73 %*                                                                      *
74 \subsection{Subsumption}
75 %*                                                                      *
76 %************************************************************************
77
78 \begin{code}
79 tcSub :: TcSigmaType            -- expected_ty; can be a type scheme;
80                                 --              can be a "hole" type variable
81       -> TcSigmaType            -- actual_ty; can be a type scheme
82       -> TcM (ExprCoFn, LIE)
83 \end{code}
84
85 (tcSub expected_ty actual_ty) checks that 
86         actual_ty <= expected_ty
87 That is, that a value of type actual_ty is acceptable in
88 a place expecting a value of type expected_ty.
89
90 It returns a coercion function 
91         co_fn :: actual_ty -> expected_ty
92 which takes an HsExpr of type actual_ty into one of type
93 expected_ty.
94
95 \begin{code}
96 tcSub expected_ty actual_ty
97   = traceTc (text "tcSub" <+> details)          `thenNF_Tc_`
98     tcAddErrCtxtM (unifyCtxt "type" expected_ty actual_ty)
99                   (tc_sub expected_ty expected_ty actual_ty actual_ty)
100   where
101     details = vcat [text "Expected:" <+> ppr expected_ty,
102                     text "Actual:  " <+> ppr actual_ty]
103 \end{code}
104
105 tc_sub carries the types before and after expanding type synonyms
106
107 \begin{code}
108 tc_sub :: TcSigmaType           -- expected_ty, before expanding synonyms
109        -> TcSigmaType           --              ..and after
110        -> TcSigmaType           -- actual_ty, before
111        -> TcSigmaType           --              ..and after
112        -> TcM (ExprCoFn, LIE)
113
114 -----------------------------------
115 -- Expand synonyms
116 tc_sub exp_sty (NoteTy _ exp_ty) act_sty act_ty = tc_sub exp_sty exp_ty act_sty act_ty
117 tc_sub exp_sty exp_ty act_sty (NoteTy _ act_ty) = tc_sub exp_sty exp_ty act_sty act_ty
118
119 -----------------------------------
120 -- "Hole type variable" case
121 -- Do this case before unwrapping for-alls in the actual_ty
122
123 tc_sub _ (TyVarTy tv) act_sty act_ty
124   | isHoleTyVar tv
125   =     -- It's a "hole" type variable
126     getTcTyVar tv       `thenNF_Tc` \ maybe_ty ->
127     case maybe_ty of
128
129         Just ty ->      -- Already been assigned
130                     tc_sub ty ty act_sty act_ty ;
131
132         Nothing ->      -- Assign it
133                     putTcTyVar tv act_sty               `thenNF_Tc_`
134                     returnTc (idCoercion, emptyLIE)
135
136
137 -----------------------------------
138 -- Generalisation case
139 --      actual_ty:   d:Eq b => b->b
140 --      expected_ty: forall a. Ord a => a->a
141 --      co_fn e      /\a. \d2:Ord a. let d = eqFromOrd d2 in e
142
143 -- It is essential to do this *before* the specialisation case
144 -- Example:  f :: (Eq a => a->a) -> ...
145 --           g :: Ord b => b->b
146 -- Consider  f g !
147
148 tc_sub exp_sty expected_ty act_sty actual_ty
149   | isSigmaTy expected_ty
150   = tcGen expected_ty (
151         \ body_exp_ty -> tc_sub body_exp_ty body_exp_ty act_sty actual_ty
152     )                           `thenTc` \ (gen_fn, co_fn, lie) ->
153     returnTc (gen_fn <.> co_fn, lie)
154
155 -----------------------------------
156 -- Specialisation case:
157 --      actual_ty:   forall a. Ord a => a->a
158 --      expected_ty: Int -> Int
159 --      co_fn e =    e Int dOrdInt
160
161 tc_sub exp_sty expected_ty act_sty actual_ty
162   | isSigmaTy actual_ty
163   = tcInstType actual_ty        `thenNF_Tc` \ (tvs, theta, body_ty) ->
164     newDicts orig theta         `thenNF_Tc` \ dicts ->
165     let
166         inst_fn e = mkHsDictApp (mkHsTyApp e (mkTyVarTys tvs))
167                                 (map instToId dicts)
168     in
169     tc_sub exp_sty expected_ty body_ty body_ty  `thenTc` \ (co_fn, lie) ->
170     returnTc (co_fn <.> mkCoercion inst_fn, lie `plusLIE` mkLIE dicts)
171   where
172     orig = Rank2Origin
173
174 -----------------------------------
175 -- Function case
176
177 tc_sub _ (FunTy exp_arg exp_res) _ (FunTy act_arg act_res)
178   = tcSub_fun exp_arg exp_res act_arg act_res
179
180 -----------------------------------
181 -- Type variable meets function: imitate
182 --
183 -- NB 1: we can't just unify the type variable with the type
184 --       because the type might not be a tau-type, and we aren't
185 --       allowed to instantiate an ordinary type variable with
186 --       a sigma-type
187 --
188 -- NB 2: can we short-cut to an error case?
189 --       when the arg/res is not a tau-type?
190 -- NO!  e.g.   f :: ((forall a. a->a) -> Int) -> Int
191 --      then   x = (f,f)
192 --      is perfectly fine!
193
194 tc_sub exp_sty exp_ty@(FunTy exp_arg exp_res) _ (TyVarTy tv)
195   = getTcTyVar tv       `thenNF_Tc` \ maybe_ty ->
196     case maybe_ty of
197         Just ty -> tc_sub exp_sty exp_ty ty ty
198         Nothing -> imitateFun tv exp_sty        `thenNF_Tc` \ (act_arg, act_res) ->
199                    tcSub_fun exp_arg exp_res act_arg act_res
200
201 tc_sub _ (TyVarTy tv) act_sty act_ty@(FunTy act_arg act_res)
202   = getTcTyVar tv       `thenNF_Tc` \ maybe_ty ->
203     case maybe_ty of
204         Just ty -> tc_sub ty ty act_sty act_ty
205         Nothing -> imitateFun tv act_sty        `thenNF_Tc` \ (exp_arg, exp_res) ->
206                    tcSub_fun exp_arg exp_res act_arg act_res
207
208 -----------------------------------
209 -- Unification case
210 -- If none of the above match, we revert to the plain unifier
211 tc_sub exp_sty expected_ty act_sty actual_ty
212   = uTys exp_sty expected_ty act_sty actual_ty  `thenTc_`
213     returnTc (idCoercion, emptyLIE)
214 \end{code}    
215     
216 %************************************************************************
217 %*                                                                      *
218 \subsection{Functions}
219 %*                                                                      *
220 %************************************************************************
221
222 \begin{code}
223 tcSub_fun exp_arg exp_res act_arg act_res
224   = tcSub act_arg exp_arg       `thenTc` \ (co_fn_arg, lie1) ->
225     tcSub exp_res act_res       `thenTc` \ (co_fn_res, lie2) ->
226     tcGetUnique                 `thenNF_Tc` \ uniq ->
227     let
228         -- co_fn_arg :: HsExpr exp_arg -> HsExpr act_arg
229         -- co_fn_res :: HsExpr act_res -> HsExpr exp_res
230         -- co_fn     :: HsExpr (act_arg -> act_res) -> HsExpr (exp_arg -> exp_res)
231         arg_id = mkSysLocal SLIT("sub") uniq exp_arg
232         coercion | isIdCoercion co_fn_arg,
233                    isIdCoercion co_fn_res = idCoercion
234                  | otherwise              = mkCoercion co_fn
235
236         co_fn e = DictLam [arg_id] 
237                      (co_fn_res <$> (HsApp e (co_fn_arg <$> (HsVar arg_id))))
238                 -- Slight hack; using a "DictLam" to get an ordinary simple lambda
239                 --      HsVar arg_id :: HsExpr exp_arg
240                 --      co_fn_arg $it :: HsExpr act_arg
241                 --      HsApp e $it   :: HsExpr act_res
242                 --      co_fn_res $it :: HsExpr exp_res
243     in
244     returnTc (coercion, lie1 `plusLIE` lie2)
245
246 imitateFun :: TcTyVar -> TcType -> NF_TcM (TcType, TcType)
247 imitateFun tv ty
248   = ASSERT( not (isHoleTyVar tv) )
249         -- NB: tv is an *ordinary* tyvar and so are the new ones
250
251         -- Check that tv isn't a type-signature type variable
252         -- (This would be found later in checkSigTyVars, but
253         --  we get a better error message if we do it here.)
254     checkTcM (not (isSkolemTyVar tv))
255              (failWithTcM (unifyWithSigErr tv ty))      `thenTc_`
256
257     newTyVarTy openTypeKind             `thenNF_Tc` \ arg ->
258     newTyVarTy openTypeKind             `thenNF_Tc` \ res ->
259     putTcTyVar tv (mkFunTy arg res)     `thenNF_Tc_`
260     returnNF_Tc (arg,res)
261 \end{code}
262
263
264 %************************************************************************
265 %*                                                                      *
266 \subsection{Generalisation}
267 %*                                                                      *
268 %************************************************************************
269
270 \begin{code}
271 tcGen :: TcSigmaType                            -- expected_ty
272       -> (TcPhiType -> TcM (result, LIE))       -- spec_ty
273       -> TcM (ExprCoFn, result, LIE)
274         -- The expression has type: spec_ty -> expected_ty
275
276 tcGen expected_ty thing_inside  -- We expect expected_ty to be a forall-type
277                                 -- If not, the call is a no-op
278   = tcInstType expected_ty              `thenNF_Tc` \ (forall_tvs, theta, phi_ty) ->
279
280         -- Type-check the arg and unify with poly type
281     thing_inside phi_ty         `thenTc` \ (result, lie) ->
282
283         -- Check that the "forall_tvs" havn't been constrained
284         -- The interesting bit here is that we must include the free variables
285         -- of the expected_ty.  Here's an example:
286         --       runST (newVar True)
287         -- Here, if we don't make a check, we'll get a type (ST s (MutVar s Bool))
288         -- for (newVar True), with s fresh.  Then we unify with the runST's arg type
289         -- forall s'. ST s' a. That unifies s' with s, and a with MutVar s Bool.
290         -- So now s' isn't unconstrained because it's linked to a.
291         -- Conclusion: include the free vars of the expected_ty in the
292         -- list of "free vars" for the signature check.
293
294     tcExtendGlobalTyVars free_tvs                               $
295     tcAddErrCtxtM (sigCtxt forall_tvs theta phi_ty)     $
296
297     newDicts SignatureOrigin theta                      `thenNF_Tc` \ dicts ->
298     tcSimplifyCheck sig_msg forall_tvs dicts lie        `thenTc` \ (free_lie, inst_binds) ->
299     checkSigTyVars forall_tvs free_tvs                  `thenTc` \ zonked_tvs ->
300
301     let
302             -- This HsLet binds any Insts which came out of the simplification.
303             -- It's a bit out of place here, but using AbsBind involves inventing
304             -- a couple of new names which seems worse.
305         dict_ids = map instToId dicts
306         co_fn e  = TyLam zonked_tvs (DictLam dict_ids (mkHsLet inst_binds e))
307     in
308     returnTc (mkCoercion co_fn, result, free_lie)
309   where
310     free_tvs = tyVarsOfType expected_ty
311     sig_msg  = ptext SLIT("When generalising the type of an expression")
312 \end{code}    
313
314     
315
316 %************************************************************************
317 %*                                                                      *
318 \subsection{Coercion functions}
319 %*                                                                      *
320 %************************************************************************
321
322 \begin{code}
323 type Coercion a = Maybe (a -> a)
324         -- Nothing => identity fn
325
326 type ExprCoFn = Coercion TypecheckedHsExpr
327 type PatCoFn  = Coercion TcPat
328
329 (<.>) :: Coercion a -> Coercion a -> Coercion a -- Composition
330 Nothing <.> Nothing = Nothing
331 Nothing <.> Just f  = Just f
332 Just f  <.> Nothing = Just f
333 Just f1 <.> Just f2 = Just (f1 . f2)
334
335 (<$>) :: Coercion a -> a -> a
336 Just f  <$> e = f e
337 Nothing <$> e = e
338
339 mkCoercion :: (a -> a) -> Coercion a
340 mkCoercion f = Just f
341
342 idCoercion :: Coercion a
343 idCoercion = Nothing
344
345 isIdCoercion :: Coercion a -> Bool
346 isIdCoercion = isNothing
347 \end{code}
348
349 %************************************************************************
350 %*                                                                      *
351 \subsection[Unify-exported]{Exported unification functions}
352 %*                                                                      *
353 %************************************************************************
354
355 The exported functions are all defined as versions of some
356 non-exported generic functions.
357
358 Unify two @TauType@s.  Dead straightforward.
359
360 \begin{code}
361 unifyTauTy :: TcTauType -> TcTauType -> TcM ()
362 unifyTauTy ty1 ty2      -- ty1 expected, ty2 inferred
363   =     -- The unifier should only ever see tau-types 
364         -- (no quantification whatsoever)
365     ASSERT2( isTauTy ty1, ppr ty1 )
366     ASSERT2( isTauTy ty2, ppr ty2 )
367     tcAddErrCtxtM (unifyCtxt "type" ty1 ty2) $
368     uTys ty1 ty1 ty2 ty2
369 \end{code}
370
371 @unifyTauTyList@ unifies corresponding elements of two lists of
372 @TauType@s.  It uses @uTys@ to do the real work.  The lists should be
373 of equal length.  We charge down the list explicitly so that we can
374 complain if their lengths differ.
375
376 \begin{code}
377 unifyTauTyLists :: [TcTauType] -> [TcTauType] ->  TcM ()
378 unifyTauTyLists []           []         = returnTc ()
379 unifyTauTyLists (ty1:tys1) (ty2:tys2) = uTys ty1 ty1 ty2 ty2   `thenTc_`
380                                         unifyTauTyLists tys1 tys2
381 unifyTauTyLists ty1s ty2s = panic "Unify.unifyTauTyLists: mismatched type lists!"
382 \end{code}
383
384 @unifyTauTyList@ takes a single list of @TauType@s and unifies them
385 all together.  It is used, for example, when typechecking explicit
386 lists, when all the elts should be of the same type.
387
388 \begin{code}
389 unifyTauTyList :: [TcTauType] -> TcM ()
390 unifyTauTyList []                = returnTc ()
391 unifyTauTyList [ty]              = returnTc ()
392 unifyTauTyList (ty1:tys@(ty2:_)) = unifyTauTy ty1 ty2   `thenTc_`
393                                    unifyTauTyList tys
394 \end{code}
395
396 %************************************************************************
397 %*                                                                      *
398 \subsection[Unify-uTys]{@uTys@: getting down to business}
399 %*                                                                      *
400 %************************************************************************
401
402 @uTys@ is the heart of the unifier.  Each arg happens twice, because
403 we want to report errors in terms of synomyms if poss.  The first of
404 the pair is used in error messages only; it is always the same as the
405 second, except that if the first is a synonym then the second may be a
406 de-synonym'd version.  This way we get better error messages.
407
408 We call the first one \tr{ps_ty1}, \tr{ps_ty2} for ``possible synomym''.
409
410 \begin{code}
411 uTys :: TcTauType -> TcTauType  -- Error reporting ty1 and real ty1
412                                 -- ty1 is the *expected* type
413
414      -> TcTauType -> TcTauType  -- Error reporting ty2 and real ty2
415                                 -- ty2 is the *actual* type
416      -> TcM ()
417
418         -- Always expand synonyms (see notes at end)
419         -- (this also throws away FTVs)
420 uTys ps_ty1 (NoteTy n1 ty1) ps_ty2 ty2 = uTys ps_ty1 ty1 ps_ty2 ty2
421 uTys ps_ty1 ty1 ps_ty2 (NoteTy n2 ty2) = uTys ps_ty1 ty1 ps_ty2 ty2
422
423         -- Variables; go for uVar
424 uTys ps_ty1 (TyVarTy tyvar1) ps_ty2 ty2 = uVar False tyvar1 ps_ty2 ty2
425 uTys ps_ty1 ty1 ps_ty2 (TyVarTy tyvar2) = uVar True  tyvar2 ps_ty1 ty1
426                                         -- "True" means args swapped
427
428         -- Predicates
429 uTys _ (SourceTy (IParam n1 t1)) _ (SourceTy (IParam n2 t2))
430   | n1 == n2 = uTys t1 t1 t2 t2
431 uTys _ (SourceTy (ClassP c1 tys1)) _ (SourceTy (ClassP c2 tys2))
432   | c1 == c2 = unifyTauTyLists tys1 tys2
433 uTys _ (SourceTy (NType tc1 tys1)) _ (SourceTy (NType tc2 tys2))
434   | tc1 == tc2 = unifyTauTyLists tys1 tys2
435
436         -- Functions; just check the two parts
437 uTys _ (FunTy fun1 arg1) _ (FunTy fun2 arg2)
438   = uTys fun1 fun1 fun2 fun2    `thenTc_`    uTys arg1 arg1 arg2 arg2
439
440         -- Type constructors must match
441 uTys ps_ty1 (TyConApp con1 tys1) ps_ty2 (TyConApp con2 tys2)
442   | con1 == con2 && equalLength tys1 tys2
443   = unifyTauTyLists tys1 tys2
444
445   | con1 == openKindCon
446         -- When we are doing kind checking, we might match a kind '?' 
447         -- against a kind '*' or '#'.  Notably, CCallable :: ? -> *, and
448         -- (CCallable Int) and (CCallable Int#) are both OK
449   = unifyOpenTypeKind ps_ty2
450
451         -- Applications need a bit of care!
452         -- They can match FunTy and TyConApp, so use splitAppTy_maybe
453         -- NB: we've already dealt with type variables and Notes,
454         -- so if one type is an App the other one jolly well better be too
455 uTys ps_ty1 (AppTy s1 t1) ps_ty2 ty2
456   = case tcSplitAppTy_maybe ty2 of
457         Just (s2,t2) -> uTys s1 s1 s2 s2        `thenTc_`    uTys t1 t1 t2 t2
458         Nothing      -> unifyMisMatch ps_ty1 ps_ty2
459
460         -- Now the same, but the other way round
461         -- Don't swap the types, because the error messages get worse
462 uTys ps_ty1 ty1 ps_ty2 (AppTy s2 t2)
463   = case tcSplitAppTy_maybe ty1 of
464         Just (s1,t1) -> uTys s1 s1 s2 s2        `thenTc_`    uTys t1 t1 t2 t2
465         Nothing      -> unifyMisMatch ps_ty1 ps_ty2
466
467         -- Not expecting for-alls in unification
468         -- ... but the error message from the unifyMisMatch more informative
469         -- than a panic message!
470
471         -- Anything else fails
472 uTys ps_ty1 ty1 ps_ty2 ty2  = unifyMisMatch ps_ty1 ps_ty2
473 \end{code}
474
475
476 Notes on synonyms
477 ~~~~~~~~~~~~~~~~~
478 If you are tempted to make a short cut on synonyms, as in this
479 pseudocode...
480
481 \begin{verbatim}
482 -- NO   uTys (SynTy con1 args1 ty1) (SynTy con2 args2 ty2)
483 -- NO     = if (con1 == con2) then
484 -- NO   -- Good news!  Same synonym constructors, so we can shortcut
485 -- NO   -- by unifying their arguments and ignoring their expansions.
486 -- NO   unifyTauTypeLists args1 args2
487 -- NO    else
488 -- NO   -- Never mind.  Just expand them and try again
489 -- NO   uTys ty1 ty2
490 \end{verbatim}
491
492 then THINK AGAIN.  Here is the whole story, as detected and reported
493 by Chris Okasaki \tr{<Chris_Okasaki@loch.mess.cs.cmu.edu>}:
494 \begin{quotation}
495 Here's a test program that should detect the problem:
496
497 \begin{verbatim}
498         type Bogus a = Int
499         x = (1 :: Bogus Char) :: Bogus Bool
500 \end{verbatim}
501
502 The problem with [the attempted shortcut code] is that
503 \begin{verbatim}
504         con1 == con2
505 \end{verbatim}
506 is not a sufficient condition to be able to use the shortcut!
507 You also need to know that the type synonym actually USES all
508 its arguments.  For example, consider the following type synonym
509 which does not use all its arguments.
510 \begin{verbatim}
511         type Bogus a = Int
512 \end{verbatim}
513
514 If you ever tried unifying, say, \tr{Bogus Char} with \tr{Bogus Bool},
515 the unifier would blithely try to unify \tr{Char} with \tr{Bool} and
516 would fail, even though the expanded forms (both \tr{Int}) should
517 match.
518
519 Similarly, unifying \tr{Bogus Char} with \tr{Bogus t} would
520 unnecessarily bind \tr{t} to \tr{Char}.
521
522 ... You could explicitly test for the problem synonyms and mark them
523 somehow as needing expansion, perhaps also issuing a warning to the
524 user.
525 \end{quotation}
526
527
528 %************************************************************************
529 %*                                                                      *
530 \subsection[Unify-uVar]{@uVar@: unifying with a type variable}
531 %*                                                                      *
532 %************************************************************************
533
534 @uVar@ is called when at least one of the types being unified is a
535 variable.  It does {\em not} assume that the variable is a fixed point
536 of the substitution; rather, notice that @uVar@ (defined below) nips
537 back into @uTys@ if it turns out that the variable is already bound.
538
539 \begin{code}
540 uVar :: Bool            -- False => tyvar is the "expected"
541                         -- True  => ty    is the "expected" thing
542      -> TcTyVar
543      -> TcTauType -> TcTauType  -- printing and real versions
544      -> TcM ()
545
546 uVar swapped tv1 ps_ty2 ty2
547   = traceTc (text "uVar" <+> ppr swapped <+> ppr tv1 <+> (ppr ps_ty2 $$ ppr ty2))       `thenNF_Tc_`
548     getTcTyVar tv1      `thenNF_Tc` \ maybe_ty1 ->
549     case maybe_ty1 of
550         Just ty1 | swapped   -> uTys ps_ty2 ty2 ty1 ty1 -- Swap back
551                  | otherwise -> uTys ty1 ty1 ps_ty2 ty2 -- Same order
552         other       -> uUnboundVar swapped tv1 maybe_ty1 ps_ty2 ty2
553
554         -- Expand synonyms; ignore FTVs
555 uUnboundVar swapped tv1 maybe_ty1 ps_ty2 (NoteTy n2 ty2)
556   = uUnboundVar swapped tv1 maybe_ty1 ps_ty2 ty2
557
558
559         -- The both-type-variable case
560 uUnboundVar swapped tv1 maybe_ty1 ps_ty2 ty2@(TyVarTy tv2)
561
562         -- Same type variable => no-op
563   | tv1 == tv2
564   = returnTc ()
565
566         -- Distinct type variables
567         -- ASSERT maybe_ty1 /= Just
568   | otherwise
569   = getTcTyVar tv2      `thenNF_Tc` \ maybe_ty2 ->
570     case maybe_ty2 of
571         Just ty2' -> uUnboundVar swapped tv1 maybe_ty1 ty2' ty2'
572
573         Nothing | update_tv2
574
575                 -> WARN( not (k1 `hasMoreBoxityInfo` k2), (ppr tv1 <+> ppr k1) $$ (ppr tv2 <+> ppr k2) )
576                    putTcTyVar tv2 (TyVarTy tv1)         `thenNF_Tc_`
577                    returnTc ()
578                 |  otherwise
579
580                 -> WARN( not (k2 `hasMoreBoxityInfo` k1), (ppr tv2 <+> ppr k2) $$ (ppr tv1 <+> ppr k1) )
581                    putTcTyVar tv1 ps_ty2                `thenNF_Tc_`
582                    returnTc ()
583   where
584     k1 = tyVarKind tv1
585     k2 = tyVarKind tv2
586     update_tv2 = (k2 `eqKind` openTypeKind) || (not (k1 `eqKind` openTypeKind) && nicer_to_update_tv2)
587                         -- Try to get rid of open type variables as soon as poss
588
589     nicer_to_update_tv2 =  isUserTyVar tv1
590                                 -- Don't unify a signature type variable if poss
591                         || isSystemName (varName tv2)
592                                 -- Try to update sys-y type variables in preference to sig-y ones
593
594         -- Second one isn't a type variable
595 uUnboundVar swapped tv1 maybe_ty1 ps_ty2 non_var_ty2
596   =     -- Check that tv1 isn't a type-signature type variable
597     checkTcM (not (isSkolemTyVar tv1))
598              (failWithTcM (unifyWithSigErr tv1 ps_ty2)) `thenTc_`
599
600         -- Check that the kinds match
601     zonkTcType ps_ty2                           `thenNF_Tc` \ ps_ty2' ->
602     checkKinds swapped tv1 ps_ty2'              `thenTc_`
603
604         -- Occurs check
605         -- Basically we want to update     tv1 := ps_ty2
606         -- because ps_ty2 has type-synonym info, which improves later error messages
607         -- 
608         -- But consider 
609         --      type A a = ()
610         --
611         --      f :: (A a -> a -> ()) -> ()
612         --      f = \ _ -> ()
613         --
614         --      x :: ()
615         --      x = f (\ x p -> p x)
616         --
617         -- In the application (p x), we try to match "t" with "A t".  If we go
618         -- ahead and bind t to A t (= ps_ty2), we'll lead the type checker into 
619         -- an infinite loop later.
620         -- But we should not reject the program, because A t = ().
621         -- Rather, we should bind t to () (= non_var_ty2).
622         -- 
623         -- That's why we have this two-state occurs-check
624     if not (tv1 `elemVarSet` tyVarsOfType ps_ty2') then
625         putTcTyVar tv1 ps_ty2'                          `thenNF_Tc_`
626         returnTc ()
627     else
628     zonkTcType non_var_ty2                              `thenNF_Tc` \ non_var_ty2' ->
629     if not (tv1 `elemVarSet` tyVarsOfType non_var_ty2') then
630         -- This branch rarely succeeds, except in strange cases
631         -- like that in the example above
632         putTcTyVar tv1 non_var_ty2'                     `thenNF_Tc_`
633         returnTc ()
634     else
635     failWithTcM (unifyOccurCheck tv1 ps_ty2')
636
637
638 checkKinds swapped tv1 ty2
639 -- We're about to unify a type variable tv1 with a non-tyvar-type ty2.
640 -- ty2 has been zonked at this stage.
641
642   | tk2 `hasMoreBoxityInfo` tk1 = returnTc ()
643
644   | otherwise
645         -- Either the kinds aren't compatible
646         --      (can happen if we unify (a b) with (c d))
647         -- or we are unifying a lifted type variable with an
648         --      unlifted type: e.g.  (id 3#) is illegal
649   = tcAddErrCtxtM (unifyKindCtxt swapped tv1 ty2)       $
650     unifyMisMatch k1 k2
651
652   where
653     (k1,k2) | swapped   = (tk2,tk1)
654             | otherwise = (tk1,tk2)
655     tk1 = tyVarKind tv1
656     tk2 = typeKind ty2
657 \end{code}
658
659
660 %************************************************************************
661 %*                                                                      *
662 \subsection[Unify-fun]{@unifyFunTy@}
663 %*                                                                      *
664 %************************************************************************
665
666 @subFunTy@ and @unifyFunTy@ is used to avoid the fruitless 
667 creation of type variables.
668
669 * subFunTy is used when we might be faced with a "hole" type variable,
670   in which case we should create two new holes. 
671
672 * unifyFunTy is used when we expect to encounter only "ordinary" 
673   type variables, so we should create new ordinary type variables
674
675 \begin{code}
676 subFunTy :: TcSigmaType                 -- Fail if ty isn't a function type
677          -> TcM (TcType, TcType)        -- otherwise return arg and result types
678 subFunTy ty@(TyVarTy tyvar)
679   
680   = getTcTyVar tyvar    `thenNF_Tc` \ maybe_ty ->
681     case maybe_ty of
682         Just ty -> subFunTy ty
683         Nothing | isHoleTyVar tyvar
684                 -> newHoleTyVarTy       `thenNF_Tc` \ arg ->
685                    newHoleTyVarTy       `thenNF_Tc` \ res ->
686                    putTcTyVar tyvar (mkFunTy arg res)   `thenNF_Tc_` 
687                    returnTc (arg,res)
688                 | otherwise 
689                 -> unify_fun_ty_help ty
690
691 subFunTy ty
692   = case tcSplitFunTy_maybe ty of
693         Just arg_and_res -> returnTc arg_and_res
694         Nothing          -> unify_fun_ty_help ty
695
696                  
697 unifyFunTy :: TcPhiType                 -- Fail if ty isn't a function type
698            -> TcM (TcType, TcType)      -- otherwise return arg and result types
699
700 unifyFunTy ty@(TyVarTy tyvar)
701   = getTcTyVar tyvar    `thenNF_Tc` \ maybe_ty ->
702     case maybe_ty of
703         Just ty' -> unifyFunTy ty'
704         Nothing  -> unify_fun_ty_help ty
705
706 unifyFunTy ty
707   = case tcSplitFunTy_maybe ty of
708         Just arg_and_res -> returnTc arg_and_res
709         Nothing          -> unify_fun_ty_help ty
710
711 unify_fun_ty_help ty    -- Special cases failed, so revert to ordinary unification
712   = newTyVarTy openTypeKind     `thenNF_Tc` \ arg ->
713     newTyVarTy openTypeKind     `thenNF_Tc` \ res ->
714     unifyTauTy ty (mkFunTy arg res)     `thenTc_`
715     returnTc (arg,res)
716 \end{code}
717
718 \begin{code}
719 unifyListTy :: TcType              -- expected list type
720             -> TcM TcType      -- list element type
721
722 unifyListTy ty@(TyVarTy tyvar)
723   = getTcTyVar tyvar    `thenNF_Tc` \ maybe_ty ->
724     case maybe_ty of
725         Just ty' -> unifyListTy ty'
726         other    -> unify_list_ty_help ty
727
728 unifyListTy ty
729   = case tcSplitTyConApp_maybe ty of
730         Just (tycon, [arg_ty]) | tycon == listTyCon -> returnTc arg_ty
731         other                                       -> unify_list_ty_help ty
732
733 unify_list_ty_help ty   -- Revert to ordinary unification
734   = newTyVarTy liftedTypeKind           `thenNF_Tc` \ elt_ty ->
735     unifyTauTy ty (mkListTy elt_ty)     `thenTc_`
736     returnTc elt_ty
737
738 -- variant for parallel arrays
739 --
740 unifyPArrTy :: TcType              -- expected list type
741             -> TcM TcType          -- list element type
742
743 unifyPArrTy ty@(TyVarTy tyvar)
744   = getTcTyVar tyvar    `thenNF_Tc` \ maybe_ty ->
745     case maybe_ty of
746       Just ty' -> unifyPArrTy ty'
747       _        -> unify_parr_ty_help ty
748 unifyPArrTy ty
749   = case tcSplitTyConApp_maybe ty of
750       Just (tycon, [arg_ty]) | tycon == parrTyCon -> returnTc arg_ty
751       _                                           -> unify_parr_ty_help ty
752
753 unify_parr_ty_help ty   -- Revert to ordinary unification
754   = newTyVarTy liftedTypeKind           `thenNF_Tc` \ elt_ty ->
755     unifyTauTy ty (mkPArrTy elt_ty)     `thenTc_`
756     returnTc elt_ty
757 \end{code}
758
759 \begin{code}
760 unifyTupleTy :: Boxity -> Arity -> TcType -> TcM [TcType]
761 unifyTupleTy boxity arity ty@(TyVarTy tyvar)
762   = getTcTyVar tyvar    `thenNF_Tc` \ maybe_ty ->
763     case maybe_ty of
764         Just ty' -> unifyTupleTy boxity arity ty'
765         other    -> unify_tuple_ty_help boxity arity ty
766
767 unifyTupleTy boxity arity ty
768   = case tcSplitTyConApp_maybe ty of
769         Just (tycon, arg_tys)
770                 |  isTupleTyCon tycon 
771                 && tyConArity tycon == arity
772                 && tupleTyConBoxity tycon == boxity
773                 -> returnTc arg_tys
774         other -> unify_tuple_ty_help boxity arity ty
775
776 unify_tuple_ty_help boxity arity ty
777   = newTyVarTys arity kind                              `thenNF_Tc` \ arg_tys ->
778     unifyTauTy ty (mkTupleTy boxity arity arg_tys)      `thenTc_`
779     returnTc arg_tys
780   where
781     kind | isBoxed boxity = liftedTypeKind
782          | otherwise      = openTypeKind
783 \end{code}
784
785
786 %************************************************************************
787 %*                                                                      *
788 \subsection{Kind unification}
789 %*                                                                      *
790 %************************************************************************
791
792 \begin{code}
793 unifyKind :: TcKind                 -- Expected
794           -> TcKind                 -- Actual
795           -> TcM ()
796 unifyKind k1 k2 
797   = tcAddErrCtxtM (unifyCtxt "kind" k1 k2) $
798     uTys k1 k1 k2 k2
799
800 unifyKinds :: [TcKind] -> [TcKind] -> TcM ()
801 unifyKinds []       []       = returnTc ()
802 unifyKinds (k1:ks1) (k2:ks2) = unifyKind k1 k2  `thenTc_`
803                                unifyKinds ks1 ks2
804 unifyKinds _ _ = panic "unifyKinds: length mis-match"
805 \end{code}
806
807 \begin{code}
808 unifyOpenTypeKind :: TcKind -> TcM ()   
809 -- Ensures that the argument kind is of the form (Type bx)
810 -- for some boxity bx
811
812 unifyOpenTypeKind ty@(TyVarTy tyvar)
813   = getTcTyVar tyvar    `thenNF_Tc` \ maybe_ty ->
814     case maybe_ty of
815         Just ty' -> unifyOpenTypeKind ty'
816         other    -> unify_open_kind_help ty
817
818 unifyOpenTypeKind ty
819   | isTypeKind ty = returnTc ()
820   | otherwise     = unify_open_kind_help ty
821
822 unify_open_kind_help ty -- Revert to ordinary unification
823   = newBoxityVar        `thenNF_Tc` \ boxity ->
824     unifyKind ty (mkTyConApp typeCon [boxity])
825 \end{code}
826
827
828 %************************************************************************
829 %*                                                                      *
830 \subsection[Unify-context]{Errors and contexts}
831 %*                                                                      *
832 %************************************************************************
833
834 Errors
835 ~~~~~~
836
837 \begin{code}
838 unifyCtxt s ty1 ty2 tidy_env    -- ty1 expected, ty2 inferred
839   = zonkTcType ty1      `thenNF_Tc` \ ty1' ->
840     zonkTcType ty2      `thenNF_Tc` \ ty2' ->
841     returnNF_Tc (err ty1' ty2')
842   where
843     err ty1 ty2 = (env1, 
844                    nest 4 
845                         (vcat [
846                            text "Expected" <+> text s <> colon <+> ppr tidy_ty1,
847                            text "Inferred" <+> text s <> colon <+> ppr tidy_ty2
848                         ]))
849                   where
850                     (env1, [tidy_ty1,tidy_ty2]) = tidyOpenTypes tidy_env [ty1,ty2]
851
852 unifyKindCtxt swapped tv1 ty2 tidy_env  -- not swapped => tv1 expected, ty2 inferred
853         -- tv1 is zonked already
854   = zonkTcType ty2      `thenNF_Tc` \ ty2' ->
855     returnNF_Tc (err ty2')
856   where
857     err ty2 = (env2, ptext SLIT("When matching types") <+> 
858                      sep [quotes pp_expected, ptext SLIT("and"), quotes pp_actual])
859             where
860               (pp_expected, pp_actual) | swapped   = (pp2, pp1)
861                                        | otherwise = (pp1, pp2)
862               (env1, tv1') = tidyOpenTyVar tidy_env tv1
863               (env2, ty2') = tidyOpenType  env1 ty2
864               pp1 = ppr tv1'
865               pp2 = ppr ty2'
866
867 unifyMisMatch ty1 ty2
868   = zonkTcType ty1      `thenNF_Tc` \ ty1' ->
869     zonkTcType ty2      `thenNF_Tc` \ ty2' ->
870     let
871         (env, [tidy_ty1, tidy_ty2]) = tidyOpenTypes emptyTidyEnv [ty1',ty2']
872         msg = hang (ptext SLIT("Couldn't match"))
873                    4 (sep [quotes (ppr tidy_ty1), 
874                            ptext SLIT("against"), 
875                            quotes (ppr tidy_ty2)])
876     in
877     failWithTcM (env, msg)
878
879 unifyWithSigErr tyvar ty
880   = (env2, hang (ptext SLIT("Cannot unify the type-signature variable") <+> quotes (ppr tidy_tyvar))
881               4 (ptext SLIT("with the type") <+> quotes (ppr tidy_ty)))
882   where
883     (env1, tidy_tyvar) = tidyOpenTyVar emptyTidyEnv tyvar
884     (env2, tidy_ty)    = tidyOpenType  env1         ty
885
886 unifyOccurCheck tyvar ty
887   = (env2, hang (ptext SLIT("Occurs check: cannot construct the infinite type:"))
888               4 (sep [ppr tidy_tyvar, char '=', ppr tidy_ty]))
889   where
890     (env1, tidy_tyvar) = tidyOpenTyVar emptyTidyEnv tyvar
891     (env2, tidy_ty)    = tidyOpenType  env1         ty
892 \end{code}
893
894
895
896 %************************************************************************
897 %*                                                                      *
898 \subsection{Checking signature type variables}
899 %*                                                                      *
900 %************************************************************************
901
902 @checkSigTyVars@ is used after the type in a type signature has been unified with
903 the actual type found.  It then checks that the type variables of the type signature
904 are
905         (a) Still all type variables
906                 eg matching signature [a] against inferred type [(p,q)]
907                 [then a will be unified to a non-type variable]
908
909         (b) Still all distinct
910                 eg matching signature [(a,b)] against inferred type [(p,p)]
911                 [then a and b will be unified together]
912
913         (c) Not mentioned in the environment
914                 eg the signature for f in this:
915
916                         g x = ... where
917                                         f :: a->[a]
918                                         f y = [x,y]
919
920                 Here, f is forced to be monorphic by the free occurence of x.
921
922         (d) Not (unified with another type variable that is) in scope.
923                 eg f x :: (r->r) = (\y->y) :: forall a. a->r
924             when checking the expression type signature, we find that
925             even though there is nothing in scope whose type mentions r,
926             nevertheless the type signature for the expression isn't right.
927
928             Another example is in a class or instance declaration:
929                 class C a where
930                    op :: forall b. a -> b
931                    op x = x
932             Here, b gets unified with a
933
934 Before doing this, the substitution is applied to the signature type variable.
935
936 We used to have the notion of a "DontBind" type variable, which would
937 only be bound to itself or nothing.  Then points (a) and (b) were 
938 self-checking.  But it gave rise to bogus consequential error messages.
939 For example:
940
941    f = (*)      -- Monomorphic
942
943    g :: Num a => a -> a
944    g x = f x x
945
946 Here, we get a complaint when checking the type signature for g,
947 that g isn't polymorphic enough; but then we get another one when
948 dealing with the (Num x) context arising from f's definition;
949 we try to unify x with Int (to default it), but find that x has already
950 been unified with the DontBind variable "a" from g's signature.
951 This is really a problem with side-effecting unification; we'd like to
952 undo g's effects when its type signature fails, but unification is done
953 by side effect, so we can't (easily).
954
955 So we revert to ordinary type variables for signatures, and try to
956 give a helpful message in checkSigTyVars.
957
958 \begin{code}
959 checkSigTyVars :: [TcTyVar]             -- Universally-quantified type variables in the signature
960                -> TcTyVarSet            -- Tyvars that are free in the type signature
961                                         --      Not necessarily zonked
962                                         --      These should *already* be in the free-in-env set, 
963                                         --      and are used here only to improve the error message
964                -> TcM [TcTyVar]         -- Zonked signature type variables
965
966 checkSigTyVars [] free = returnTc []
967 checkSigTyVars sig_tyvars free_tyvars
968   = zonkTcTyVars sig_tyvars             `thenNF_Tc` \ sig_tys ->
969     tcGetGlobalTyVars                   `thenNF_Tc` \ globals ->
970
971     checkTcM (allDistinctTyVars sig_tys globals)
972              (complain sig_tys globals) `thenTc_`
973
974     returnTc (map (tcGetTyVar "checkSigTyVars") sig_tys)
975
976   where
977     complain sig_tys globals
978       = -- "check" checks each sig tyvar in turn
979         foldlNF_Tc check
980                    (env2, emptyVarEnv, [])
981                    (tidy_tvs `zip` tidy_tys)    `thenNF_Tc` \ (env3, _, msgs) ->
982
983         failWithTcM (env3, main_msg $$ vcat msgs)
984       where
985         (env1, tidy_tvs) = tidyOpenTyVars emptyTidyEnv sig_tyvars
986         (env2, tidy_tys) = tidyOpenTypes  env1         sig_tys
987
988         main_msg = ptext SLIT("Inferred type is less polymorphic than expected")
989
990         check (tidy_env, acc, msgs) (sig_tyvar,ty)
991                 -- sig_tyvar is from the signature;
992                 -- ty is what you get if you zonk sig_tyvar and then tidy it
993                 --
994                 -- acc maps a zonked type variable back to a signature type variable
995           = case tcGetTyVar_maybe ty of {
996               Nothing ->                        -- Error (a)!
997                         returnNF_Tc (tidy_env, acc, unify_msg sig_tyvar (quotes (ppr ty)) : msgs) ;
998
999               Just tv ->
1000
1001             case lookupVarEnv acc tv of {
1002                 Just sig_tyvar' ->      -- Error (b)!
1003                         returnNF_Tc (tidy_env, acc, unify_msg sig_tyvar thing : msgs)
1004                     where
1005                         thing = ptext SLIT("another quantified type variable") <+> quotes (ppr sig_tyvar')
1006
1007               ; Nothing ->
1008
1009             if tv `elemVarSet` globals  -- Error (c) or (d)! Type variable escapes
1010                                         -- The least comprehensible, so put it last
1011                         -- Game plan: 
1012                         --    a) get the local TcIds and TyVars from the environment,
1013                         --       and pass them to find_globals (they might have tv free)
1014                         --    b) similarly, find any free_tyvars that mention tv
1015             then   tcGetEnv                                                     `thenNF_Tc` \ ve ->
1016                    find_globals tv tidy_env  (tcLEnvElts ve)                    `thenNF_Tc` \ (tidy_env1, globs) ->
1017                    find_frees   tv tidy_env1 [] (varSetElems free_tyvars)       `thenNF_Tc` \ (tidy_env2, frees) ->
1018                    returnNF_Tc (tidy_env2, acc, escape_msg sig_tyvar tv globs frees : msgs)
1019
1020             else        -- All OK
1021             returnNF_Tc (tidy_env, extendVarEnv acc tv sig_tyvar, msgs)
1022             }}
1023
1024 -----------------------
1025 -- find_globals looks at the value environment and finds values
1026 -- whose types mention the offending type variable.  It has to be 
1027 -- careful to zonk the Id's type first, so it has to be in the monad.
1028 -- We must be careful to pass it a zonked type variable, too.
1029
1030 find_globals :: Var 
1031              -> TidyEnv 
1032              -> [TcTyThing] 
1033              -> NF_TcM (TidyEnv, [SDoc])
1034
1035 find_globals tv tidy_env things
1036   = go tidy_env [] things
1037   where
1038     go tidy_env acc [] = returnNF_Tc (tidy_env, acc)
1039     go tidy_env acc (thing : things)
1040       = find_thing ignore_it tidy_env thing     `thenNF_Tc` \ (tidy_env1, maybe_doc) ->
1041         case maybe_doc of
1042           Just d  -> go tidy_env1 (d:acc) things
1043           Nothing -> go tidy_env1 acc     things
1044
1045     ignore_it ty = not (tv `elemVarSet` tyVarsOfType ty)
1046
1047 -----------------------
1048 find_thing ignore_it tidy_env (ATcId id)
1049   = zonkTcType  (idType id)     `thenNF_Tc` \ id_ty ->
1050     if ignore_it id_ty then
1051         returnNF_Tc (tidy_env, Nothing)
1052     else let
1053         (tidy_env', tidy_ty) = tidyOpenType tidy_env id_ty
1054         msg = sep [ppr id <+> dcolon <+> ppr tidy_ty, 
1055                    nest 2 (parens (ptext SLIT("bound at") <+>
1056                                    ppr (getSrcLoc id)))]
1057     in
1058     returnNF_Tc (tidy_env', Just msg)
1059
1060 find_thing ignore_it tidy_env (ATyVar tv)
1061   = zonkTcTyVar tv              `thenNF_Tc` \ tv_ty ->
1062     if ignore_it tv_ty then
1063         returnNF_Tc (tidy_env, Nothing)
1064     else let
1065         (tidy_env1, tv1)     = tidyOpenTyVar tidy_env  tv
1066         (tidy_env2, tidy_ty) = tidyOpenType  tidy_env1 tv_ty
1067         msg = sep [ptext SLIT("Type variable") <+> quotes (ppr tv1) <+> eq_stuff, nest 2 bound_at]
1068
1069         eq_stuff | Just tv' <- Type.getTyVar_maybe tv_ty, tv == tv' = empty
1070                  | otherwise                                        = equals <+> ppr tv_ty
1071                 -- It's ok to use Type.getTyVar_maybe because ty is zonked by now
1072         
1073         bound_at = tyVarBindingInfo tv
1074     in
1075     returnNF_Tc (tidy_env2, Just msg)
1076
1077 -----------------------
1078 find_frees tv tidy_env acc []
1079   = returnNF_Tc (tidy_env, acc)
1080 find_frees tv tidy_env acc (ftv:ftvs)
1081   = zonkTcTyVar ftv     `thenNF_Tc` \ ty ->
1082     if tv `elemVarSet` tyVarsOfType ty then
1083         let
1084             (tidy_env', ftv') = tidyOpenTyVar tidy_env ftv
1085         in
1086         find_frees tv tidy_env' (ftv':acc) ftvs
1087     else
1088         find_frees tv tidy_env  acc        ftvs
1089
1090
1091 escape_msg sig_tv tv globs frees
1092   = mk_msg sig_tv <+> ptext SLIT("escapes") $$
1093     if not (null globs) then
1094         vcat [pp_it <+> ptext SLIT("is mentioned in the environment:"), 
1095               nest 2 (vcat globs)]
1096      else if not (null frees) then
1097         vcat [ptext SLIT("It is reachable from the type variable(s)") <+> pprQuotedList frees,
1098               nest 2 (ptext SLIT("which") <+> is_are <+> ptext SLIT("free in the signature"))
1099         ]
1100      else
1101         empty   -- Sigh.  It's really hard to give a good error message
1102                 -- all the time.   One bad case is an existential pattern match
1103   where
1104     is_are | isSingleton frees = ptext SLIT("is")
1105            | otherwise         = ptext SLIT("are")
1106     pp_it | sig_tv /= tv = ptext SLIT("It unifies with") <+> quotes (ppr tv) <> comma <+> ptext SLIT("which")
1107           | otherwise    = ptext SLIT("It")
1108
1109     vcat_first :: Int -> [SDoc] -> SDoc
1110     vcat_first n []     = empty
1111     vcat_first 0 (x:xs) = text "...others omitted..."
1112     vcat_first n (x:xs) = x $$ vcat_first (n-1) xs
1113
1114
1115 unify_msg tv thing = mk_msg tv <+> ptext SLIT("is unified with") <+> thing
1116 mk_msg tv          = ptext SLIT("Quantified type variable") <+> quotes (ppr tv)
1117 \end{code}
1118
1119 These two context are used with checkSigTyVars
1120     
1121 \begin{code}
1122 sigCtxt :: [TcTyVar] -> TcThetaType -> TcTauType
1123         -> TidyEnv -> NF_TcM (TidyEnv, Message)
1124 sigCtxt sig_tyvars sig_theta sig_tau tidy_env
1125   = zonkTcType sig_tau          `thenNF_Tc` \ actual_tau ->
1126     let
1127         (env1, tidy_sig_tyvars)  = tidyOpenTyVars tidy_env sig_tyvars
1128         (env2, tidy_sig_rho)     = tidyOpenType env1 (mkRhoTy sig_theta sig_tau)
1129         (env3, tidy_actual_tau)  = tidyOpenType env2 actual_tau
1130         msg = vcat [ptext SLIT("Signature type:    ") <+> pprType (mkForAllTys tidy_sig_tyvars tidy_sig_rho),
1131                     ptext SLIT("Type to generalise:") <+> pprType tidy_actual_tau
1132                    ]
1133     in
1134     returnNF_Tc (env3, msg)
1135
1136 sigPatCtxt bound_tvs bound_ids tidy_env
1137   = returnNF_Tc (env1,
1138                  sep [ptext SLIT("When checking a pattern that binds"),
1139                       nest 4 (vcat (zipWith ppr_id show_ids tidy_tys))])
1140   where
1141     show_ids = filter is_interesting bound_ids
1142     is_interesting id = any (`elemVarSet` idFreeTyVars id) bound_tvs
1143
1144     (env1, tidy_tys) = tidyOpenTypes tidy_env (map idType show_ids)
1145     ppr_id id ty     = ppr id <+> dcolon <+> ppr ty
1146         -- Don't zonk the types so we get the separate, un-unified versions
1147 \end{code}
1148
1149