ddd4f766ee8ead64ed22a375ec43aefd957ed9c3
[ghc-hetmet.git] / ghc / compiler / typecheck / TcMonoType.lhs
1 %
2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
3 %
4 \section[TcMonoType]{Typechecking user-specified @MonoTypes@}
5
6 \begin{code}
7 module TcMonoType ( tcHsType, tcHsRecType, tcIfaceType,
8                     tcHsSigType, tcHsLiftedSigType, 
9                     tcRecTheta, checkAmbiguity,
10
11                         -- Kind checking
12                     kcHsTyVar, kcHsTyVars, mkTyClTyVars,
13                     kcHsType, kcHsSigType, kcHsLiftedSigType, kcHsContext,
14                     tcTyVars, tcHsTyVars, mkImmutTyVars,
15
16                     TcSigInfo(..), tcTySig, mkTcSig, maybeSig,
17                     checkSigTyVars, sigCtxt, sigPatCtxt
18                   ) where
19
20 #include "HsVersions.h"
21
22 import HsSyn            ( HsType(..), HsTyVarBndr(..),
23                           Sig(..), HsPred(..), pprParendHsType, HsTupCon(..), hsTyVarNames )
24 import RnHsSyn          ( RenamedHsType, RenamedHsPred, RenamedContext, RenamedSig )
25 import TcHsSyn          ( TcId )
26
27 import TcMonad
28 import TcEnv            ( tcExtendTyVarEnv, tcLookup, tcLookupGlobal,
29                           tcGetGlobalTyVars, tcEnvTcIds, tcEnvTyVars,
30                           TyThing(..), TcTyThing(..), tcExtendKindEnv
31                         )
32 import TcType           ( TcKind, TcTyVar, TcThetaType, TcTauType,
33                           newKindVar, tcInstSigVar,
34                           zonkKindEnv, zonkTcType, zonkTcTyVars, zonkTcTyVar
35                         )
36 import Inst             ( Inst, InstOrigin(..), newMethodWithGivenTy, instToId )
37 import FunDeps          ( grow )
38 import TcUnify          ( unifyKind, unifyOpenTypeKind )
39 import Unify            ( allDistinctTyVars )
40 import Type             ( Type, Kind, PredType(..), ThetaType, SigmaType, TauType,
41                           mkTyVarTy, mkTyVarTys, mkFunTy, mkSynTy,
42                           zipFunTys, hoistForAllTys,
43                           mkSigmaTy, mkPredTy, mkTyConApp,
44                           mkAppTys, splitForAllTys, splitRhoTy, mkRhoTy,
45                           liftedTypeKind, unliftedTypeKind, mkArrowKind,
46                           mkArrowKinds, getTyVar_maybe, getTyVar, splitFunTy_maybe,
47                           tidyOpenType, tidyOpenTypes, tidyTyVar, tidyTyVars,
48                           tyVarsOfType, tyVarsOfPred, mkForAllTys,
49                           isUnboxedTupleType, isForAllTy, isIPPred
50                         )
51 import PprType          ( pprType, pprTheta, pprPred )
52 import Subst            ( mkTopTyVarSubst, substTy )
53 import CoreFVs          ( idFreeTyVars )
54 import Id               ( mkLocalId, idName, idType )
55 import Var              ( Id, Var, TyVar, mkTyVar, tyVarKind )
56 import VarEnv
57 import VarSet
58 import ErrUtils         ( Message )
59 import TyCon            ( TyCon, isSynTyCon, tyConArity, tyConKind )
60 import Class            ( classArity, classTyCon )
61 import Name             ( Name )
62 import TysWiredIn       ( mkListTy, mkTupleTy, genUnitTyCon )
63 import BasicTypes       ( Boxity(..), RecFlag(..), isRec )
64 import SrcLoc           ( SrcLoc )
65 import Util             ( mapAccumL, isSingleton )
66 import Outputable
67
68 \end{code}
69
70
71 %************************************************************************
72 %*                                                                      *
73 \subsection{Kind checking}
74 %*                                                                      *
75 %************************************************************************
76
77 Kind checking
78 ~~~~~~~~~~~~~
79 When we come across the binding site for some type variables, we
80 proceed in two stages
81
82 1. Figure out what kind each tyvar has
83
84 2. Create suitably-kinded tyvars, 
85    extend the envt, 
86    and typecheck the body
87
88 To do step 1, we proceed thus:
89
90 1a. Bind each type variable to a kind variable
91 1b. Apply the kind checker
92 1c. Zonk the resulting kinds
93
94 The kind checker is passed to tcHsTyVars as an argument.  
95
96 For example, when we find
97         (forall a m. m a -> m a)
98 we bind a,m to kind varibles and kind-check (m a -> m a).  This
99 makes a get kind *, and m get kind *->*.  Now we typecheck (m a -> m a)
100 in an environment that binds a and m suitably.
101
102 The kind checker passed to tcHsTyVars needs to look at enough to
103 establish the kind of the tyvar:
104   * For a group of type and class decls, it's just the group, not
105         the rest of the program
106   * For a tyvar bound in a pattern type signature, its the types
107         mentioned in the other type signatures in that bunch of patterns
108   * For a tyvar bound in a RULE, it's the type signatures on other
109         universally quantified variables in the rule
110
111 Note that this may occasionally give surprising results.  For example:
112
113         data T a b = MkT (a b)
114
115 Here we deduce                  a::*->*, b::*.
116 But equally valid would be
117                                 a::(*->*)-> *, b::*->*
118
119 \begin{code}
120 tcHsTyVars :: [HsTyVarBndr Name] 
121            -> TcM a                             -- The kind checker
122            -> ([TyVar] -> TcM b)
123            -> TcM b
124
125 tcHsTyVars [] kind_check thing_inside = thing_inside []
126         -- A useful short cut for a common case!
127   
128 tcHsTyVars tv_names kind_check thing_inside
129   = kcHsTyVars tv_names                                 `thenNF_Tc` \ tv_names_w_kinds ->
130     tcExtendKindEnv tv_names_w_kinds kind_check         `thenTc_`
131     zonkKindEnv tv_names_w_kinds                        `thenNF_Tc` \ tvs_w_kinds ->
132     let
133         tyvars = mkImmutTyVars tvs_w_kinds
134     in
135     tcExtendTyVarEnv tyvars (thing_inside tyvars)
136
137 tcTyVars :: [Name] 
138              -> TcM a                           -- The kind checker
139              -> TcM [TyVar]
140 tcTyVars [] kind_check = returnTc []
141
142 tcTyVars tv_names kind_check
143   = mapNF_Tc newNamedKindVar tv_names           `thenTc` \ kind_env ->
144     tcExtendKindEnv kind_env kind_check         `thenTc_`
145     zonkKindEnv kind_env                        `thenNF_Tc` \ tvs_w_kinds ->
146     listNF_Tc [tcNewSigTyVar name kind | (name,kind) <- tvs_w_kinds]
147 \end{code}
148     
149
150 \begin{code}
151 kcHsTyVar  :: HsTyVarBndr name   -> NF_TcM (name, TcKind)
152 kcHsTyVars :: [HsTyVarBndr name] -> NF_TcM [(name, TcKind)]
153
154 kcHsTyVar (UserTyVar name)       = newNamedKindVar name
155 kcHsTyVar (IfaceTyVar name kind) = returnNF_Tc (name, kind)
156
157 kcHsTyVars tvs = mapNF_Tc kcHsTyVar tvs
158
159 newNamedKindVar name = newKindVar       `thenNF_Tc` \ kind ->
160                        returnNF_Tc (name, kind)
161
162 ---------------------------
163 kcLiftedType :: RenamedHsType -> TcM ()
164         -- The type ty must be a *lifted* *type*
165 kcLiftedType ty
166   = kcHsType ty                         `thenTc` \ kind ->
167     tcAddErrCtxt (typeKindCtxt ty)      $
168     unifyKind liftedTypeKind kind
169     
170 ---------------------------
171 kcTypeType :: RenamedHsType -> TcM ()
172         -- The type ty must be a *type*, but it can be lifted or unlifted.
173 kcTypeType ty
174   = kcHsType ty                         `thenTc` \ kind ->
175     tcAddErrCtxt (typeKindCtxt ty)      $
176     unifyOpenTypeKind kind
177
178 ---------------------------
179 kcHsSigType, kcHsLiftedSigType :: RenamedHsType -> TcM ()
180         -- Used for type signatures
181 kcHsSigType      = kcTypeType
182 kcHsLiftedSigType = kcLiftedType
183
184 ---------------------------
185 kcHsType :: RenamedHsType -> TcM TcKind
186 kcHsType (HsTyVar name)       = kcTyVar name
187
188 kcHsType (HsListTy ty)
189   = kcLiftedType ty             `thenTc` \ tau_ty ->
190     returnTc liftedTypeKind
191
192 kcHsType (HsTupleTy (HsTupCon _ boxity _) tys)
193   = mapTc kcTypeType tys        `thenTc_`
194     returnTc (case boxity of
195                   Boxed   -> liftedTypeKind
196                   Unboxed -> unliftedTypeKind)
197
198 kcHsType (HsFunTy ty1 ty2)
199   = kcTypeType ty1      `thenTc_`
200     kcTypeType ty2      `thenTc_`
201     returnTc liftedTypeKind
202
203 kcHsType ty@(HsOpTy ty1 op ty2)
204   = kcTyVar op                          `thenTc` \ op_kind ->
205     kcHsType ty1                        `thenTc` \ ty1_kind ->
206     kcHsType ty2                        `thenTc` \ ty2_kind ->
207     tcAddErrCtxt (appKindCtxt (ppr ty)) $
208     kcAppKind op_kind  ty1_kind         `thenTc` \ op_kind' ->
209     kcAppKind op_kind' ty2_kind
210    
211 kcHsType (HsPredTy pred)
212   = kcHsPred pred               `thenTc_`
213     returnTc liftedTypeKind
214
215 kcHsType ty@(HsAppTy ty1 ty2)
216   = kcHsType ty1                        `thenTc` \ tc_kind ->
217     kcHsType ty2                        `thenTc` \ arg_kind ->
218     tcAddErrCtxt (appKindCtxt (ppr ty)) $
219     kcAppKind tc_kind arg_kind
220
221 kcHsType (HsForAllTy (Just tv_names) context ty)
222   = kcHsTyVars tv_names         `thenNF_Tc` \ kind_env ->
223     tcExtendKindEnv kind_env    $
224     kcHsContext context         `thenTc_`
225     kcHsType ty                 `thenTc_`
226     returnTc liftedTypeKind
227
228 ---------------------------
229 kcAppKind fun_kind arg_kind
230   = case splitFunTy_maybe fun_kind of 
231         Just (arg_kind', res_kind)
232                 -> unifyKind arg_kind arg_kind' `thenTc_`
233                    returnTc res_kind
234
235         Nothing -> newKindVar                                           `thenNF_Tc` \ res_kind ->
236                    unifyKind fun_kind (mkArrowKind arg_kind res_kind)   `thenTc_`
237                    returnTc res_kind
238
239
240 ---------------------------
241 kcHsContext ctxt = mapTc_ kcHsPred ctxt
242
243 kcHsPred :: RenamedHsPred -> TcM ()
244 kcHsPred pred@(HsIParam name ty)
245   = tcAddErrCtxt (appKindCtxt (ppr pred))       $
246     kcLiftedType ty
247
248 kcHsPred pred@(HsClassP cls tys)
249   = tcAddErrCtxt (appKindCtxt (ppr pred))       $
250     kcClass cls                                 `thenTc` \ kind ->
251     mapTc kcHsType tys                          `thenTc` \ arg_kinds ->
252     unifyKind kind (mkArrowKinds arg_kinds liftedTypeKind)
253
254  ---------------------------
255 kcTyVar name    -- Could be a tyvar or a tycon
256   = tcLookup name       `thenTc` \ thing ->
257     case thing of 
258         AThing kind         -> returnTc kind
259         ATyVar tv           -> returnTc (tyVarKind tv)
260         AGlobal (ATyCon tc) -> returnTc (tyConKind tc) 
261         other               -> failWithTc (wrongThingErr "type" thing name)
262
263 kcClass cls     -- Must be a class
264   = tcLookup cls                                `thenNF_Tc` \ thing -> 
265     case thing of
266         AThing kind           -> returnTc kind
267         AGlobal (AClass cls)  -> returnTc (tyConKind (classTyCon cls))
268         other                 -> failWithTc (wrongThingErr "class" thing cls)
269 \end{code}
270
271 %************************************************************************
272 %*                                                                      *
273 \subsection{Checking types}
274 %*                                                                      *
275 %************************************************************************
276
277 tcHsSigType and tcHsLiftedSigType
278 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
279
280 tcHsSigType and tcHsLiftedSigType are used for type signatures written by the programmer
281
282   * We hoist any inner for-alls to the top
283
284   * Notice that we kind-check first, because the type-check assumes
285         that the kinds are already checked.
286
287   * They are only called when there are no kind vars in the environment
288         so the kind returned is indeed a Kind not a TcKind
289
290 \begin{code}
291 tcHsSigType, tcHsLiftedSigType :: RenamedHsType -> TcM Type
292   -- Do kind checking, and hoist for-alls to the top
293 tcHsSigType       ty = kcTypeType   ty `thenTc_` tcHsType ty    
294 tcHsLiftedSigType ty = kcLiftedType ty `thenTc_` tcHsType ty
295
296 tcHsType    ::            RenamedHsType -> TcM Type
297 tcHsRecType :: RecFlag -> RenamedHsType -> TcM Type
298   -- Don't do kind checking, but do hoist for-alls to the top
299   -- These are used in type and class decls, where kinding is
300   -- done in advance
301 tcHsType             ty = tc_type NonRecursive ty  `thenTc` \ ty' ->  returnTc (hoistForAllTys ty')
302 tcHsRecType wimp_out ty = tc_type wimp_out     ty  `thenTc` \ ty' ->  returnTc (hoistForAllTys ty')
303
304 -- In interface files the type is already kinded,
305 -- and we definitely don't want to hoist for-alls.
306 -- Otherwise we'll change
307 --      dmfail :: forall m:(*->*) Monad m => forall a:* => String -> m a
308 -- into 
309 --      dmfail :: forall m:(*->*) a:* Monad m => String -> m a
310 -- which definitely isn't right!
311 tcIfaceType ty = tc_type NonRecursive ty
312 \end{code}
313
314
315 %************************************************************************
316 %*                                                                      *
317 \subsection{tc_type}
318 %*                                                                      *
319 %************************************************************************
320
321 tc_type, the main work horse
322 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
323
324         -------------------
325         *** BIG WARNING ***
326         -------------------
327
328 tc_type is used to typecheck the types in the RHS of data
329 constructors.  In the case of recursive data types, that means that
330 the type constructors themselves are (partly) black holes.  e.g.
331
332         data T a = MkT a [T a]
333
334 While typechecking the [T a] on the RHS, T itself is not yet fully
335 defined.  That in turn places restrictions on what you can check in
336 tcHsType; if you poke on too much you get a black hole.  I keep
337 forgetting this, hence this warning!
338
339 The wimp_out argument tells when we are in a mutually-recursive
340 group of type declarations, so omit various checks else we
341 get a black hole.  They'll be done again later, in TcTyClDecls.tcGroup.
342
343         --------------------------
344         *** END OF BIG WARNING ***
345         --------------------------
346
347
348 \begin{code}
349 tc_type :: RecFlag -> RenamedHsType -> TcM Type
350
351 tc_type wimp_out ty@(HsTyVar name)
352   = tc_app wimp_out ty []
353
354 tc_type wimp_out (HsListTy ty)
355   = tc_arg_type wimp_out ty     `thenTc` \ tau_ty ->
356     returnTc (mkListTy tau_ty)
357
358 tc_type wimp_out (HsTupleTy (HsTupCon _ boxity arity) tys)
359   = ASSERT( arity == length tys )
360     mapTc tc_tup_arg tys        `thenTc` \ tau_tys ->
361     returnTc (mkTupleTy boxity arity tau_tys)
362   where
363     tc_tup_arg = case boxity of
364                    Boxed   -> tc_arg_type wimp_out
365                    Unboxed -> tc_type     wimp_out 
366         -- Unboxed tuples can have polymorphic or unboxed args.
367         -- This happens in the workers for functions returning
368         -- product types with polymorphic components
369
370 tc_type wimp_out (HsFunTy ty1 ty2)
371   = tc_type wimp_out ty1                        `thenTc` \ tau_ty1 ->
372         -- Function argument can be polymorphic, but
373         -- must not be an unboxed tuple
374     checkTc (not (isUnboxedTupleType tau_ty1))
375             (ubxArgTyErr ty1)                   `thenTc_`
376     tc_type wimp_out ty2                        `thenTc` \ tau_ty2 ->
377     returnTc (mkFunTy tau_ty1 tau_ty2)
378
379 tc_type wimp_out (HsNumTy n)
380   = ASSERT(n== 1)
381     returnTc (mkTyConApp genUnitTyCon [])
382
383 tc_type wimp_out (HsOpTy ty1 op ty2) =
384   tc_arg_type wimp_out ty1 `thenTc` \ tau_ty1 ->
385   tc_arg_type wimp_out ty2 `thenTc` \ tau_ty2 ->
386   tc_fun_type op [tau_ty1,tau_ty2]
387
388 tc_type wimp_out (HsAppTy ty1 ty2)
389   = tc_app wimp_out ty1 [ty2]
390
391 tc_type wimp_out (HsPredTy pred)
392   = tc_pred wimp_out pred       `thenTc` \ pred' ->
393     returnTc (mkPredTy pred')
394
395 tc_type wimp_out full_ty@(HsForAllTy (Just tv_names) ctxt ty)
396   = let
397         kind_check = kcHsContext ctxt `thenTc_` kcHsType ty
398     in
399     tcHsTyVars tv_names kind_check                      $ \ tyvars ->
400     tcRecTheta wimp_out ctxt                            `thenTc` \ theta ->
401
402         -- Context behaves like a function type
403         -- This matters.  Return-unboxed-tuple analysis can
404         -- give overloaded functions like
405         --      f :: forall a. Num a => (# a->a, a->a #)
406         -- And we want these to get through the type checker
407     (if null theta then
408         tc_arg_type wimp_out ty
409      else
410         tc_type wimp_out ty
411     )                                                   `thenTc` \ tau ->
412
413     checkAmbiguity wimp_out is_source tyvars theta tau
414   where
415     is_source = case tv_names of
416                    (UserTyVar _ : _) -> True
417                    other             -> False
418
419
420   -- tc_arg_type checks that the argument of a 
421   -- type appplication isn't a for-all type or an unboxed tuple type
422   -- For example, we want to reject things like:
423   --
424   --    instance Ord a => Ord (forall s. T s a)
425   -- and
426   --    g :: T s (forall b.b)
427   --
428   -- Other unboxed types are very occasionally allowed as type
429   -- arguments depending on the kind of the type constructor
430
431 tc_arg_type wimp_out arg_ty     
432   | isRec wimp_out
433   = tc_type wimp_out arg_ty
434
435   | otherwise
436   = tc_type wimp_out arg_ty                                             `thenTc` \ arg_ty' ->
437     checkTc (not (isForAllTy arg_ty'))         (polyArgTyErr arg_ty)    `thenTc_`
438     checkTc (not (isUnboxedTupleType arg_ty')) (ubxArgTyErr arg_ty)     `thenTc_`
439     returnTc arg_ty'
440
441 tc_arg_types wimp_out arg_tys = mapTc (tc_arg_type wimp_out) arg_tys
442 \end{code}
443
444 Help functions for type applications
445 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
446
447 \begin{code}
448 tc_app :: RecFlag -> RenamedHsType -> [RenamedHsType] -> TcM Type
449 tc_app wimp_out (HsAppTy ty1 ty2) tys
450   = tc_app wimp_out ty1 (ty2:tys)
451
452 tc_app wimp_out ty tys
453   = tcAddErrCtxt (appKindCtxt pp_app)   $
454     tc_arg_types wimp_out tys           `thenTc` \ arg_tys ->
455     case ty of
456         HsTyVar fun -> tc_fun_type fun arg_tys
457         other       -> tc_type wimp_out ty              `thenTc` \ fun_ty ->
458                        returnNF_Tc (mkAppTys fun_ty arg_tys)
459   where
460     pp_app = ppr ty <+> sep (map pprParendHsType tys)
461
462 -- (tc_fun_type ty arg_tys) returns (mkAppTys ty arg_tys)
463 -- But not quite; for synonyms it checks the correct arity, and builds a SynTy
464 --      hence the rather strange functionality.
465
466 tc_fun_type name arg_tys
467   = tcLookup name                       `thenTc` \ thing ->
468     case thing of
469         ATyVar tv -> returnTc (mkAppTys (mkTyVarTy tv) arg_tys)
470
471         AGlobal (ATyCon tc)
472                 | isSynTyCon tc ->  checkTc arity_ok err_msg    `thenTc_`
473                                     returnTc (mkAppTys (mkSynTy tc (take arity arg_tys))
474                                                        (drop arity arg_tys))
475
476                 | otherwise       ->  returnTc (mkTyConApp tc arg_tys)
477                 where
478
479                     arity_ok = arity <= n_args 
480                     arity = tyConArity tc
481                         -- It's OK to have an *over-applied* type synonym
482                         --      data Tree a b = ...
483                         --      type Foo a = Tree [a]
484                         --      f :: Foo a b -> ...
485                     err_msg = arityErr "Type synonym" name arity n_args
486                     n_args  = length arg_tys
487
488         other -> failWithTc (wrongThingErr "type constructor" thing name)
489 \end{code}
490
491
492 Contexts
493 ~~~~~~~~
494 \begin{code}
495 tcRecTheta :: RecFlag -> RenamedContext -> TcM ThetaType
496         -- Used when we are expecting a ClassContext (i.e. no implicit params)
497 tcRecTheta wimp_out context = mapTc (tc_pred wimp_out) context
498
499 tc_pred wimp_out assn@(HsClassP class_name tys)
500   = tcAddErrCtxt (appKindCtxt (ppr assn))       $
501     tc_arg_types wimp_out tys                   `thenTc` \ arg_tys ->
502     tcLookupGlobal class_name                   `thenTc` \ thing ->
503     case thing of
504         AClass clas -> checkTc (arity == n_tys) err     `thenTc_`
505                        returnTc (ClassP clas arg_tys)
506             where
507                 arity = classArity clas
508                 n_tys = length tys
509                 err   = arityErr "Class" class_name arity n_tys
510
511         other -> failWithTc (wrongThingErr "class" (AGlobal thing) class_name)
512
513 tc_pred wimp_out assn@(HsIParam name ty)
514   = tcAddErrCtxt (appKindCtxt (ppr assn))       $
515     tc_arg_type wimp_out ty                     `thenTc` \ arg_ty ->
516     returnTc (IParam name arg_ty)
517 \end{code}
518
519
520 Check for ambiguity
521 ~~~~~~~~~~~~~~~~~~~
522           forall V. P => tau
523 is ambiguous if P contains generic variables
524 (i.e. one of the Vs) that are not mentioned in tau
525
526 However, we need to take account of functional dependencies
527 when we speak of 'mentioned in tau'.  Example:
528         class C a b | a -> b where ...
529 Then the type
530         forall x y. (C x y) => x
531 is not ambiguous because x is mentioned and x determines y
532
533 NOTE: In addition, GHC insists that at least one type variable
534 in each constraint is in V.  So we disallow a type like
535         forall a. Eq b => b -> b
536 even in a scope where b is in scope.
537 This is the is_free test below.
538
539 Notes on the 'is_source_polytype' test above
540 Check ambiguity only for source-program types, not
541 for types coming from inteface files.  The latter can
542 legitimately have ambiguous types. Example
543    class S a where s :: a -> (Int,Int)
544    instance S Char where s _ = (1,1)
545    f:: S a => [a] -> Int -> (Int,Int)
546    f (_::[a]) x = (a*x,b)
547         where (a,b) = s (undefined::a)
548 Here the worker for f gets the type
549         fw :: forall a. S a => Int -> (# Int, Int #)
550
551 If the list of tv_names is empty, we have a monotype,
552 and then we don't need to check for ambiguity either,
553 because the test can't fail (see is_ambig).
554
555 \begin{code}
556 checkAmbiguity :: RecFlag -> Bool
557                -> [TyVar] -> ThetaType -> TauType
558                -> TcM SigmaType
559 checkAmbiguity wimp_out is_source_polytype forall_tyvars theta tau
560   | isRec wimp_out = returnTc sigma_ty
561   | otherwise      = mapTc_ check_pred theta    `thenTc_`
562                      returnTc sigma_ty
563   where
564     sigma_ty          = mkSigmaTy forall_tyvars theta tau
565     tau_vars          = tyVarsOfType tau
566     extended_tau_vars = grow theta tau_vars
567
568         -- Hack alert.  If there are no tyvars, (ppr sigma_ty) will print
569         -- something strange like {Eq k} -> k -> k, because there is no
570         -- ForAll at the top of the type.  Since this is going to the user
571         -- we want it to look like a proper Haskell type even then; hence the hack
572         -- 
573         -- This shows up in the complaint about
574         --      case C a where
575         --        op :: Eq a => a -> a
576     ppr_sigma         | null forall_tyvars = pprTheta theta <+> ptext SLIT("=>") <+> ppr tau
577                       | otherwise          = ppr sigma_ty 
578
579     is_ambig ct_var   = (ct_var `elem` forall_tyvars) &&
580                         not (ct_var `elemVarSet` extended_tau_vars)
581     is_free ct_var    = not (ct_var `elem` forall_tyvars)
582     
583     check_pred pred = checkTc (not any_ambig)                 (ambigErr pred ppr_sigma) `thenTc_`
584                       checkTc (isIPPred pred || not all_free) (freeErr  pred ppr_sigma)
585              where 
586                 ct_vars   = varSetElems (tyVarsOfPred pred)
587                 all_free  = all is_free ct_vars
588                 any_ambig = is_source_polytype && any is_ambig ct_vars
589 \end{code}
590
591 %************************************************************************
592 %*                                                                      *
593 \subsection{Type variables, with knot tying!}
594 %*                                                                      *
595 %************************************************************************
596
597 \begin{code}
598 mkImmutTyVars :: [(Name,Kind)] -> [TyVar]
599 mkImmutTyVars pairs = [mkTyVar name kind | (name, kind) <- pairs]
600
601 mkTyClTyVars :: Kind                    -- Kind of the tycon or class
602              -> [HsTyVarBndr Name]
603              -> [TyVar]
604 mkTyClTyVars kind tyvar_names
605   = mkImmutTyVars tyvars_w_kinds
606   where
607     (tyvars_w_kinds, _) = zipFunTys (hsTyVarNames tyvar_names) kind
608 \end{code}
609
610
611 %************************************************************************
612 %*                                                                      *
613 \subsection{Signatures}
614 %*                                                                      *
615 %************************************************************************
616
617 @tcSigs@ checks the signatures for validity, and returns a list of
618 {\em freshly-instantiated} signatures.  That is, the types are already
619 split up, and have fresh type variables installed.  All non-type-signature
620 "RenamedSigs" are ignored.
621
622 The @TcSigInfo@ contains @TcTypes@ because they are unified with
623 the variable's type, and after that checked to see whether they've
624 been instantiated.
625
626 \begin{code}
627 data TcSigInfo
628   = TySigInfo       
629         Name                    -- N, the Name in corresponding binding
630
631         TcId                    -- *Polymorphic* binder for this value...
632                                 -- Has name = N
633
634         [TcTyVar]               -- tyvars
635         TcThetaType             -- theta
636         TcTauType               -- tau
637
638         TcId                    -- *Monomorphic* binder for this value
639                                 -- Does *not* have name = N
640                                 -- Has type tau
641
642         [Inst]                  -- Empty if theta is null, or
643                                 -- (method mono_id) otherwise
644
645         SrcLoc                  -- Of the signature
646
647 instance Outputable TcSigInfo where
648     ppr (TySigInfo nm id tyvars theta tau _ inst loc) =
649         ppr nm <+> ptext SLIT("::") <+> ppr tyvars <+> ppr theta <+> ptext SLIT("=>") <+> ppr tau
650
651 maybeSig :: [TcSigInfo] -> Name -> Maybe (TcSigInfo)
652         -- Search for a particular signature
653 maybeSig [] name = Nothing
654 maybeSig (sig@(TySigInfo sig_name _ _ _ _ _ _ _) : sigs) name
655   | name == sig_name = Just sig
656   | otherwise        = maybeSig sigs name
657 \end{code}
658
659
660 \begin{code}
661 tcTySig :: RenamedSig -> TcM TcSigInfo
662
663 tcTySig (Sig v ty src_loc)
664  = tcAddSrcLoc src_loc                          $ 
665    tcAddErrCtxt (tcsigCtxt v)                   $
666    tcHsSigType ty                               `thenTc` \ sigma_tc_ty ->
667    mkTcSig (mkLocalId v sigma_tc_ty) src_loc    `thenNF_Tc` \ sig -> 
668    returnTc sig
669
670 mkTcSig :: TcId -> SrcLoc -> NF_TcM TcSigInfo
671 mkTcSig poly_id src_loc
672   =     -- Instantiate this type
673         -- It's important to do this even though in the error-free case
674         -- we could just split the sigma_tc_ty (since the tyvars don't
675         -- unified with anything).  But in the case of an error, when
676         -- the tyvars *do* get unified with something, we want to carry on
677         -- typechecking the rest of the program with the function bound
678         -- to a pristine type, namely sigma_tc_ty
679    let
680         (tyvars, rho) = splitForAllTys (idType poly_id)
681    in
682    mapNF_Tc tcInstSigVar tyvars         `thenNF_Tc` \ tyvars' ->
683         -- Make *signature* type variables
684
685    let
686      tyvar_tys' = mkTyVarTys tyvars'
687      rho' = substTy (mkTopTyVarSubst tyvars tyvar_tys') rho
688         -- mkTopTyVarSubst because the tyvars' are fresh
689      (theta', tau') = splitRhoTy rho'
690         -- This splitRhoTy tries hard to make sure that tau' is a type synonym
691         -- wherever possible, which can improve interface files.
692    in
693    newMethodWithGivenTy SignatureOrigin 
694                 poly_id
695                 tyvar_tys'
696                 theta' tau'                     `thenNF_Tc` \ inst ->
697         -- We make a Method even if it's not overloaded; no harm
698         
699    returnNF_Tc (TySigInfo name poly_id tyvars' theta' tau' (instToId inst) [inst] src_loc)
700   where
701     name = idName poly_id
702 \end{code}
703
704
705
706 %************************************************************************
707 %*                                                                      *
708 \subsection{Checking signature type variables}
709 %*                                                                      *
710 %************************************************************************
711
712 @checkSigTyVars@ is used after the type in a type signature has been unified with
713 the actual type found.  It then checks that the type variables of the type signature
714 are
715         (a) Still all type variables
716                 eg matching signature [a] against inferred type [(p,q)]
717                 [then a will be unified to a non-type variable]
718
719         (b) Still all distinct
720                 eg matching signature [(a,b)] against inferred type [(p,p)]
721                 [then a and b will be unified together]
722
723         (c) Not mentioned in the environment
724                 eg the signature for f in this:
725
726                         g x = ... where
727                                         f :: a->[a]
728                                         f y = [x,y]
729
730                 Here, f is forced to be monorphic by the free occurence of x.
731
732         (d) Not (unified with another type variable that is) in scope.
733                 eg f x :: (r->r) = (\y->y) :: forall a. a->r
734             when checking the expression type signature, we find that
735             even though there is nothing in scope whose type mentions r,
736             nevertheless the type signature for the expression isn't right.
737
738             Another example is in a class or instance declaration:
739                 class C a where
740                    op :: forall b. a -> b
741                    op x = x
742             Here, b gets unified with a
743
744 Before doing this, the substitution is applied to the signature type variable.
745
746 We used to have the notion of a "DontBind" type variable, which would
747 only be bound to itself or nothing.  Then points (a) and (b) were 
748 self-checking.  But it gave rise to bogus consequential error messages.
749 For example:
750
751    f = (*)      -- Monomorphic
752
753    g :: Num a => a -> a
754    g x = f x x
755
756 Here, we get a complaint when checking the type signature for g,
757 that g isn't polymorphic enough; but then we get another one when
758 dealing with the (Num x) context arising from f's definition;
759 we try to unify x with Int (to default it), but find that x has already
760 been unified with the DontBind variable "a" from g's signature.
761 This is really a problem with side-effecting unification; we'd like to
762 undo g's effects when its type signature fails, but unification is done
763 by side effect, so we can't (easily).
764
765 So we revert to ordinary type variables for signatures, and try to
766 give a helpful message in checkSigTyVars.
767
768 \begin{code}
769 checkSigTyVars :: [TcTyVar]             -- Universally-quantified type variables in the signature
770                -> TcTyVarSet            -- Tyvars that are free in the type signature
771                                         --      Not necessarily zonked
772                                         --      These should *already* be in the free-in-env set, 
773                                         --      and are used here only to improve the error message
774                -> TcM [TcTyVar]         -- Zonked signature type variables
775
776 checkSigTyVars [] free = returnTc []
777 checkSigTyVars sig_tyvars free_tyvars
778   = zonkTcTyVars sig_tyvars             `thenNF_Tc` \ sig_tys ->
779     tcGetGlobalTyVars                   `thenNF_Tc` \ globals ->
780
781     checkTcM (allDistinctTyVars sig_tys globals)
782              (complain sig_tys globals) `thenTc_`
783
784     returnTc (map (getTyVar "checkSigTyVars") sig_tys)
785
786   where
787     complain sig_tys globals
788       = -- For the in-scope ones, zonk them and construct a map
789         -- from the zonked tyvar to the in-scope one
790         -- If any of the in-scope tyvars zonk to a type, then ignore them;
791         -- that'll be caught later when we back up to their type sig
792         tcGetEnv                                `thenNF_Tc` \ env ->
793         let
794            in_scope_tvs = tcEnvTyVars env
795         in
796         zonkTcTyVars in_scope_tvs               `thenNF_Tc` \ in_scope_tys ->
797         let
798             in_scope_assoc = [ (zonked_tv, in_scope_tv) 
799                              | (z_ty, in_scope_tv) <- in_scope_tys `zip` in_scope_tvs,
800                                Just zonked_tv <- [getTyVar_maybe z_ty]
801                              ]
802             in_scope_env = mkVarEnv in_scope_assoc
803         in
804
805         -- "check" checks each sig tyvar in turn
806         foldlNF_Tc check
807                    (env2, in_scope_env, [])
808                    (tidy_tvs `zip` tidy_tys)    `thenNF_Tc` \ (env3, _, msgs) ->
809
810         failWithTcM (env3, main_msg $$ nest 4 (vcat msgs))
811       where
812         (env1, tidy_tvs) = mapAccumL tidyTyVar emptyTidyEnv sig_tyvars
813         (env2, tidy_tys) = tidyOpenTypes env1 sig_tys
814
815         main_msg = ptext SLIT("Inferred type is less polymorphic than expected")
816
817         check (tidy_env, acc, msgs) (sig_tyvar,ty)
818                 -- sig_tyvar is from the signature;
819                 -- ty is what you get if you zonk sig_tyvar and then tidy it
820                 --
821                 -- acc maps a zonked type variable back to a signature type variable
822           = case getTyVar_maybe ty of {
823               Nothing ->                        -- Error (a)!
824                         returnNF_Tc (tidy_env, acc, unify_msg sig_tyvar (ppr ty) : msgs) ;
825
826               Just tv ->
827
828             case lookupVarEnv acc tv of {
829                 Just sig_tyvar' ->      -- Error (b) or (d)!
830                         returnNF_Tc (tidy_env, acc, unify_msg sig_tyvar (ppr sig_tyvar') : msgs) ;
831
832                 Nothing ->
833
834             if tv `elemVarSet` globals  -- Error (c)! Type variable escapes
835                                         -- The least comprehensible, so put it last
836                         -- Game plan: 
837                         --    a) get the local TcIds from the environment,
838                         --       and pass them to find_globals (they might have tv free)
839                         --    b) similarly, find any free_tyvars that mention tv
840             then   tcGetEnv                                                     `thenNF_Tc` \ ve ->
841                    find_globals tv tidy_env  [] (tcEnvTcIds ve)                 `thenNF_Tc` \ (tidy_env1, globs) ->
842                    find_frees   tv tidy_env1 [] (varSetElems free_tyvars)       `thenNF_Tc` \ (tidy_env2, frees) ->
843                    returnNF_Tc (tidy_env2, acc, escape_msg sig_tyvar tv globs frees : msgs)
844
845             else        -- All OK
846             returnNF_Tc (tidy_env, extendVarEnv acc tv sig_tyvar, msgs)
847             }}
848
849 -- find_globals looks at the value environment and finds values
850 -- whose types mention the offending type variable.  It has to be 
851 -- careful to zonk the Id's type first, so it has to be in the monad.
852 -- We must be careful to pass it a zonked type variable, too.
853
854 find_globals :: Var 
855              -> TidyEnv 
856              -> [(Name,Type)] 
857              -> [Id] 
858              -> NF_TcM (TidyEnv,[(Name,Type)])
859
860 find_globals tv tidy_env acc []
861   = returnNF_Tc (tidy_env, acc)
862
863 find_globals tv tidy_env acc (id:ids) 
864   | isEmptyVarSet (idFreeTyVars id)
865   = find_globals tv tidy_env acc ids
866
867   | otherwise
868   = zonkTcType (idType id)      `thenNF_Tc` \ id_ty ->
869     if tv `elemVarSet` tyVarsOfType id_ty then
870         let 
871            (tidy_env', id_ty') = tidyOpenType tidy_env id_ty
872            acc'                = (idName id, id_ty') : acc
873         in
874         find_globals tv tidy_env' acc' ids
875     else
876         find_globals tv tidy_env  acc  ids
877
878 find_frees tv tidy_env acc []
879   = returnNF_Tc (tidy_env, acc)
880 find_frees tv tidy_env acc (ftv:ftvs)
881   = zonkTcTyVar ftv     `thenNF_Tc` \ ty ->
882     if tv `elemVarSet` tyVarsOfType ty then
883         let
884             (tidy_env', ftv') = tidyTyVar tidy_env ftv
885         in
886         find_frees tv tidy_env' (ftv':acc) ftvs
887     else
888         find_frees tv tidy_env  acc        ftvs
889
890
891 escape_msg sig_tv tv globs frees
892   = mk_msg sig_tv <+> ptext SLIT("escapes") $$
893     if not (null globs) then
894         vcat [pp_it <+> ptext SLIT("is mentioned in the environment"),
895               ptext SLIT("The following variables in the environment mention") <+> quotes (ppr tv),
896               nest 2 (vcat_first 10 [ppr name <+> dcolon <+> ppr ty | (name,ty) <- globs])
897         ]
898      else if not (null frees) then
899         vcat [ptext SLIT("It is reachable from the type variable(s)") <+> pprQuotedList frees,
900               nest 2 (ptext SLIT("which") <+> is_are <+> ptext SLIT("free in the signature"))
901         ]
902      else
903         empty   -- Sigh.  It's really hard to give a good error message
904                 -- all the time.   One bad case is an existential pattern match
905   where
906     is_are | isSingleton frees = ptext SLIT("is")
907            | otherwise         = ptext SLIT("are")
908     pp_it | sig_tv /= tv = ptext SLIT("It unifies with") <+> quotes (ppr tv) <> comma <+> ptext SLIT("which")
909           | otherwise    = ptext SLIT("It")
910
911     vcat_first :: Int -> [SDoc] -> SDoc
912     vcat_first n []     = empty
913     vcat_first 0 (x:xs) = text "...others omitted..."
914     vcat_first n (x:xs) = x $$ vcat_first (n-1) xs
915
916 unify_msg tv thing = mk_msg tv <+> ptext SLIT("is unified with") <+> quotes thing
917 mk_msg tv          = ptext SLIT("Quantified type variable") <+> quotes (ppr tv)
918 \end{code}
919
920 These two context are used with checkSigTyVars
921     
922 \begin{code}
923 sigCtxt :: Message -> [TcTyVar] -> TcThetaType -> TcTauType
924         -> TidyEnv -> NF_TcM (TidyEnv, Message)
925 sigCtxt when sig_tyvars sig_theta sig_tau tidy_env
926   = zonkTcType sig_tau          `thenNF_Tc` \ actual_tau ->
927     let
928         (env1, tidy_sig_tyvars)  = tidyTyVars tidy_env sig_tyvars
929         (env2, tidy_sig_rho)     = tidyOpenType env1 (mkRhoTy sig_theta sig_tau)
930         (env3, tidy_actual_tau)  = tidyOpenType env2 actual_tau
931         msg = vcat [ptext SLIT("Signature type:    ") <+> pprType (mkForAllTys tidy_sig_tyvars tidy_sig_rho),
932                     ptext SLIT("Type to generalise:") <+> pprType tidy_actual_tau,
933                     when
934                    ]
935     in
936     returnNF_Tc (env3, msg)
937
938 sigPatCtxt bound_tvs bound_ids tidy_env
939   = returnNF_Tc (env1,
940                  sep [ptext SLIT("When checking a pattern that binds"),
941                       nest 4 (vcat (zipWith ppr_id show_ids tidy_tys))])
942   where
943     show_ids = filter is_interesting bound_ids
944     is_interesting id = any (`elemVarSet` idFreeTyVars id) bound_tvs
945
946     (env1, tidy_tys) = tidyOpenTypes tidy_env (map idType show_ids)
947     ppr_id id ty     = ppr id <+> dcolon <+> ppr ty
948         -- Don't zonk the types so we get the separate, un-unified versions
949 \end{code}
950
951
952 %************************************************************************
953 %*                                                                      *
954 \subsection{Errors and contexts}
955 %*                                                                      *
956 %************************************************************************
957
958 \begin{code}
959 tcsigCtxt v   = ptext SLIT("In a type signature for") <+> quotes (ppr v)
960
961 typeKindCtxt :: RenamedHsType -> Message
962 typeKindCtxt ty = sep [ptext SLIT("When checking that"),
963                        nest 2 (quotes (ppr ty)),
964                        ptext SLIT("is a type")]
965
966 appKindCtxt :: SDoc -> Message
967 appKindCtxt pp = ptext SLIT("When checking kinds in") <+> quotes pp
968
969 wrongThingErr expected thing name
970   = pp_thing thing <+> quotes (ppr name) <+> ptext SLIT("used as a") <+> text expected
971   where
972     pp_thing (AGlobal (ATyCon _)) = ptext SLIT("Type constructor")
973     pp_thing (AGlobal (AClass _)) = ptext SLIT("Class")
974     pp_thing (AGlobal (AnId   _)) = ptext SLIT("Identifier")
975     pp_thing (ATyVar _)           = ptext SLIT("Type variable")
976     pp_thing (ATcId _)            = ptext SLIT("Local identifier")
977     pp_thing (AThing _)           = ptext SLIT("Utterly bogus")
978
979 ambigErr pred ppr_ty
980   = sep [ptext SLIT("Ambiguous constraint") <+> quotes (pprPred pred),
981          nest 4 (ptext SLIT("for the type:") <+> ppr_ty),
982          nest 4 (ptext SLIT("At least one of the forall'd type variables mentioned by the constraint") $$
983                  ptext SLIT("must be reachable from the type after the =>"))]
984
985 freeErr pred ppr_ty
986   = sep [ptext SLIT("The constraint") <+> quotes (pprPred pred) <+>
987                    ptext SLIT("does not mention any of the universally quantified type variables"),
988          nest 4 (ptext SLIT("in the type") <+> quotes ppr_ty)
989     ]
990
991 polyArgTyErr ty = ptext SLIT("Illegal polymorphic type as argument:")   <+> ppr ty
992 ubxArgTyErr  ty = ptext SLIT("Illegal unboxed tuple type as argument:") <+> ppr ty
993 \end{code}