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