[project @ 2005-01-26 16:10:02 by simonpj]
[ghc-hetmet.git] / ghc / compiler / typecheck / TcHsType.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 TcHsType (
8         tcHsSigType, tcHsDeriv,
9         UserTypeCtxt(..), 
10
11                 -- Kind checking
12         kcHsTyVars, kcHsSigType, kcHsLiftedSigType, 
13         kcCheckHsType, kcHsContext, kcHsType, 
14         
15                 -- Typechecking kinded types
16         tcHsKindedContext, tcHsKindedType, tcHsBangType,
17         tcTyVarBndrs, dsHsType, tcLHsConSig, tcDataKindSig,
18
19         tcHsPatSigType, tcAddLetBoundTyVars,
20         
21         TcSigInfo(..), TcSigFun, lookupSig 
22    ) where
23
24 #include "HsVersions.h"
25
26 import HsSyn            ( HsType(..), LHsType, HsTyVarBndr(..), LHsTyVarBndr, HsBang,
27                           LHsContext, HsPred(..), LHsPred, LHsBinds,
28                           getBangStrictness, collectSigTysFromHsBinds )
29 import RnHsSyn          ( extractHsTyVars )
30 import TcRnMonad
31 import TcEnv            ( tcExtendTyVarEnv, tcExtendKindEnv,
32                           tcLookup, tcLookupClass, tcLookupTyCon,
33                           TyThing(..), getInLocalScope, wrongThingErr
34                         )
35 import TcMType          ( newKindVar, newMetaTyVar, zonkTcKindToKind, 
36                           checkValidType, UserTypeCtxt(..), pprHsSigCtxt
37                         )
38 import TcUnify          ( unifyFunKind, checkExpectedKind )
39 import TcType           ( Type, PredType(..), ThetaType, 
40                           MetaDetails(Flexi), hoistForAllTys,
41                           TcType, TcTyVar, TcKind, TcThetaType, TcTauType,
42                           mkForAllTys, mkFunTys, tcEqType, isPredTy, mkFunTy, 
43                           mkSigmaTy, mkPredTy, mkGenTyConApp, mkTyConApp, mkAppTys, 
44                           tcSplitFunTy_maybe, tcSplitForAllTys, typeKind )
45 import Kind             ( Kind, isLiftedTypeKind, liftedTypeKind, ubxTupleKind, 
46                           openTypeKind, argTypeKind, splitKindFunTys )
47 import Id               ( idName )
48 import Var              ( TyVar, mkTyVar )
49 import TyCon            ( TyCon, tyConKind )
50 import Class            ( Class, classTyCon )
51 import Name             ( Name, mkInternalName )
52 import OccName          ( mkOccName, tvName )
53 import NameSet
54 import PrelNames        ( genUnitTyConName )
55 import Type             ( deShadowTy )
56 import TysWiredIn       ( mkListTy, mkPArrTy, mkTupleTy )
57 import Bag              ( bagToList )
58 import BasicTypes       ( Boxity(..) )
59 import SrcLoc           ( Located(..), unLoc, noLoc, srcSpanStart )
60 import UniqSupply       ( uniqsFromSupply )
61 import Outputable
62 import List             ( nubBy )
63 \end{code}
64
65
66         ----------------------------
67                 General notes
68         ----------------------------
69
70 Generally speaking we now type-check types in three phases
71
72   1.  kcHsType: kind check the HsType
73         *includes* performing any TH type splices;
74         so it returns a translated, and kind-annotated, type
75
76   2.  dsHsType: convert from HsType to Type:
77         perform zonking
78         expand type synonyms [mkGenTyApps]
79         hoist the foralls [tcHsType]
80
81   3.  checkValidType: check the validity of the resulting type
82
83 Often these steps are done one after the other (tcHsSigType).
84 But in mutually recursive groups of type and class decls we do
85         1 kind-check the whole group
86         2 build TyCons/Classes in a knot-tied way
87         3 check the validity of types in the now-unknotted TyCons/Classes
88
89 For example, when we find
90         (forall a m. m a -> m a)
91 we bind a,m to kind varibles and kind-check (m a -> m a).  This makes
92 a get kind *, and m get kind *->*.  Now we typecheck (m a -> m a) in
93 an environment that binds a and m suitably.
94
95 The kind checker passed to tcHsTyVars needs to look at enough to
96 establish the kind of the tyvar:
97   * For a group of type and class decls, it's just the group, not
98         the rest of the program
99   * For a tyvar bound in a pattern type signature, its the types
100         mentioned in the other type signatures in that bunch of patterns
101   * For a tyvar bound in a RULE, it's the type signatures on other
102         universally quantified variables in the rule
103
104 Note that this may occasionally give surprising results.  For example:
105
106         data T a b = MkT (a b)
107
108 Here we deduce                  a::*->*,       b::*
109 But equally valid would be      a::(*->*)-> *, b::*->*
110
111
112 Validity checking
113 ~~~~~~~~~~~~~~~~~
114 Some of the validity check could in principle be done by the kind checker, 
115 but not all:
116
117 - During desugaring, we normalise by expanding type synonyms.  Only
118   after this step can we check things like type-synonym saturation
119   e.g.  type T k = k Int
120         type S a = a
121   Then (T S) is ok, because T is saturated; (T S) expands to (S Int);
122   and then S is saturated.  This is a GHC extension.
123
124 - Similarly, also a GHC extension, we look through synonyms before complaining
125   about the form of a class or instance declaration
126
127 - Ambiguity checks involve functional dependencies, and it's easier to wait
128   until knots have been resolved before poking into them
129
130 Also, in a mutually recursive group of types, we can't look at the TyCon until we've
131 finished building the loop.  So to keep things simple, we postpone most validity
132 checking until step (3).
133
134 Knot tying
135 ~~~~~~~~~~
136 During step (1) we might fault in a TyCon defined in another module, and it might
137 (via a loop) refer back to a TyCon defined in this module. So when we tie a big
138 knot around type declarations with ARecThing, so that the fault-in code can get
139 the TyCon being defined.
140
141
142 %************************************************************************
143 %*                                                                      *
144 \subsection{Checking types}
145 %*                                                                      *
146 %************************************************************************
147
148 \begin{code}
149 tcHsSigType :: UserTypeCtxt -> LHsType Name -> TcM Type
150   -- Do kind checking, and hoist for-alls to the top
151   -- NB: it's important that the foralls that come from the top-level
152   --     HsForAllTy in hs_ty occur *first* in the returned type.
153   --     See Note [Scoped] with TcSigInfo
154 tcHsSigType ctxt hs_ty 
155   = addErrCtxt (pprHsSigCtxt ctxt hs_ty) $
156     do  { kinded_ty <- kcTypeType hs_ty
157         ; ty <- tcHsKindedType kinded_ty
158         ; checkValidType ctxt ty        
159         ; returnM ty }
160 -- Used for the deriving(...) items
161 tcHsDeriv :: LHsType Name -> TcM ([TyVar], Class, [Type])
162 tcHsDeriv = addLocM (tc_hs_deriv [])
163
164 tc_hs_deriv tv_names (HsPredTy (HsClassP cls_name hs_tys))
165   = kcHsTyVars tv_names                 $ \ tv_names' ->
166     do  { cls_kind <- kcClass cls_name
167         ; (tys, res_kind) <- kcApps cls_kind (ppr cls_name) hs_tys
168         ; tcTyVarBndrs tv_names'        $ \ tyvars ->
169     do  { arg_tys <- dsHsTypes tys
170         ; cls <- tcLookupClass cls_name
171         ; return (tyvars, cls, arg_tys) }}
172
173 tc_hs_deriv tv_names1 (HsForAllTy _ tv_names2 (L _ []) (L _ ty))
174   =     -- Funny newtype deriving form
175         --      forall a. C [a]
176         -- where C has arity 2.  Hence can't use regular functions
177     tc_hs_deriv (tv_names1 ++ tv_names2) ty
178
179 tc_hs_deriv _ other
180   = failWithTc (ptext SLIT("Illegal deriving item") <+> ppr other)
181 \end{code}
182
183         These functions are used during knot-tying in
184         type and class declarations, when we have to
185         separate kind-checking, desugaring, and validity checking
186
187 \begin{code}
188 kcHsSigType, kcHsLiftedSigType :: LHsType Name -> TcM (LHsType Name)
189         -- Used for type signatures
190 kcHsSigType ty       = kcTypeType ty
191 kcHsLiftedSigType ty = kcLiftedType ty
192
193 tcHsKindedType :: LHsType Name -> TcM Type
194   -- Don't do kind checking, nor validity checking, 
195   --    but do hoist for-alls to the top
196   -- This is used in type and class decls, where kinding is
197   -- done in advance, and validity checking is done later
198   -- [Validity checking done later because of knot-tying issues.]
199 tcHsKindedType hs_ty 
200   = do  { ty <- dsHsType hs_ty
201         ; return (hoistForAllTys ty) }
202
203 tcHsBangType :: LHsType Name -> TcM Type
204 -- Permit a bang, but discard it
205 tcHsBangType (L span (HsBangTy b ty)) = tcHsKindedType ty
206 tcHsBangType ty                       = tcHsKindedType ty
207
208 tcHsKindedContext :: LHsContext Name -> TcM ThetaType
209 -- Used when we are expecting a ClassContext (i.e. no implicit params)
210 -- Does not do validity checking, like tcHsKindedType
211 tcHsKindedContext hs_theta = addLocM (mappM dsHsLPred) hs_theta
212 \end{code}
213
214
215 %************************************************************************
216 %*                                                                      *
217                 The main kind checker: kcHsType
218 %*                                                                      *
219 %************************************************************************
220         
221         First a couple of simple wrappers for kcHsType
222
223 \begin{code}
224 ---------------------------
225 kcLiftedType :: LHsType Name -> TcM (LHsType Name)
226 -- The type ty must be a *lifted* *type*
227 kcLiftedType ty = kcCheckHsType ty liftedTypeKind
228     
229 ---------------------------
230 kcTypeType :: LHsType Name -> TcM (LHsType Name)
231 -- The type ty must be a *type*, but it can be lifted or 
232 -- unlifted or an unboxed tuple.
233 kcTypeType ty = kcCheckHsType ty openTypeKind
234
235 ---------------------------
236 kcCheckHsType :: LHsType Name -> TcKind -> TcM (LHsType Name)
237 -- Check that the type has the specified kind
238 -- Be sure to use checkExpectedKind, rather than simply unifying 
239 -- with OpenTypeKind, because it gives better error messages
240 kcCheckHsType (L span ty) exp_kind 
241   = setSrcSpan span                             $
242     kc_hs_type ty                               `thenM` \ (ty', act_kind) ->
243     checkExpectedKind ty act_kind exp_kind      `thenM_`
244     returnM (L span ty')
245 \end{code}
246
247         Here comes the main function
248
249 \begin{code}
250 kcHsType :: LHsType Name -> TcM (LHsType Name, TcKind)
251 kcHsType ty = wrapLocFstM kc_hs_type ty
252 -- kcHsType *returns* the kind of the type, rather than taking an expected
253 -- kind as argument as tcExpr does.  
254 -- Reasons: 
255 --      (a) the kind of (->) is
256 --              forall bx1 bx2. Type bx1 -> Type bx2 -> Type Boxed
257 --          so we'd need to generate huge numbers of bx variables.
258 --      (b) kinds are so simple that the error messages are fine
259 --
260 -- The translated type has explicitly-kinded type-variable binders
261
262 kc_hs_type (HsParTy ty)
263  = kcHsType ty          `thenM` \ (ty', kind) ->
264    returnM (HsParTy ty', kind)
265
266 kc_hs_type (HsTyVar name)
267   = kcTyVar name        `thenM` \ kind ->
268     returnM (HsTyVar name, kind)
269
270 kc_hs_type (HsListTy ty) 
271   = kcLiftedType ty                     `thenM` \ ty' ->
272     returnM (HsListTy ty', liftedTypeKind)
273
274 kc_hs_type (HsPArrTy ty)
275   = kcLiftedType ty                     `thenM` \ ty' ->
276     returnM (HsPArrTy ty', liftedTypeKind)
277
278 kc_hs_type (HsNumTy n)
279    = returnM (HsNumTy n, liftedTypeKind)
280
281 kc_hs_type (HsKindSig ty k) 
282   = kcCheckHsType ty k  `thenM` \ ty' ->
283     returnM (HsKindSig ty' k, k)
284
285 kc_hs_type (HsTupleTy Boxed tys)
286   = mappM kcLiftedType tys      `thenM` \ tys' ->
287     returnM (HsTupleTy Boxed tys', liftedTypeKind)
288
289 kc_hs_type (HsTupleTy Unboxed tys)
290   = mappM kcTypeType tys        `thenM` \ tys' ->
291     returnM (HsTupleTy Unboxed tys', ubxTupleKind)
292
293 kc_hs_type (HsFunTy ty1 ty2)
294   = kcCheckHsType ty1 argTypeKind       `thenM` \ ty1' ->
295     kcTypeType ty2                      `thenM` \ ty2' ->
296     returnM (HsFunTy ty1' ty2', liftedTypeKind)
297
298 kc_hs_type ty@(HsOpTy ty1 op ty2)
299   = addLocM kcTyVar op                  `thenM` \ op_kind ->
300     kcApps op_kind (ppr op) [ty1,ty2]   `thenM` \ ([ty1',ty2'], res_kind) ->
301     returnM (HsOpTy ty1' op ty2', res_kind)
302
303 kc_hs_type ty@(HsAppTy ty1 ty2)
304   = kcHsType fun_ty                       `thenM` \ (fun_ty', fun_kind) ->
305     kcApps fun_kind (ppr fun_ty) arg_tys  `thenM` \ ((arg_ty':arg_tys'), res_kind) ->
306     returnM (foldl mk_app (HsAppTy fun_ty' arg_ty') arg_tys', res_kind)
307   where
308     (fun_ty, arg_tys) = split ty1 [ty2]
309     split (L _ (HsAppTy f a)) as = split f (a:as)
310     split f                   as = (f,as)
311     mk_app fun arg = HsAppTy (noLoc fun) arg    -- Add noLocs for inner nodes of
312                                                 -- the application; they are never used
313     
314 kc_hs_type (HsPredTy pred)
315   = kcHsPred pred               `thenM` \ pred' ->
316     returnM (HsPredTy pred', liftedTypeKind)
317
318 kc_hs_type (HsForAllTy exp tv_names context ty)
319   = kcHsTyVars tv_names         $ \ tv_names' ->
320     kcHsContext context         `thenM` \ ctxt' ->
321     kcLiftedType ty             `thenM` \ ty' ->
322         -- The body of a forall is usually a type, but in principle
323         -- there's no reason to prohibit *unlifted* types.
324         -- In fact, GHC can itself construct a function with an
325         -- unboxed tuple inside a for-all (via CPR analyis; see 
326         -- typecheck/should_compile/tc170)
327         --
328         -- Still, that's only for internal interfaces, which aren't
329         -- kind-checked, so we only allow liftedTypeKind here
330     returnM (HsForAllTy exp tv_names' ctxt' ty', liftedTypeKind)
331
332 kc_hs_type (HsBangTy b ty)
333   = do { (ty', kind) <- kcHsType ty
334        ; return (HsBangTy b ty', kind) }
335
336 kc_hs_type ty@(HsSpliceTy _)
337   = failWithTc (ptext SLIT("Unexpected type splice:") <+> ppr ty)
338
339
340 ---------------------------
341 kcApps :: TcKind                        -- Function kind
342        -> SDoc                          -- Function 
343        -> [LHsType Name]                -- Arg types
344        -> TcM ([LHsType Name], TcKind)  -- Kind-checked args
345 kcApps fun_kind ppr_fun args
346   = split_fk fun_kind (length args)     `thenM` \ (arg_kinds, res_kind) ->
347     zipWithM kc_arg args arg_kinds      `thenM` \ args' ->
348     returnM (args', res_kind)
349   where
350     split_fk fk 0 = returnM ([], fk)
351     split_fk fk n = unifyFunKind fk     `thenM` \ mb_fk ->
352                     case mb_fk of 
353                         Nothing       -> failWithTc too_many_args 
354                         Just (ak,fk') -> split_fk fk' (n-1)     `thenM` \ (aks, rk) ->
355                                          returnM (ak:aks, rk)
356
357     kc_arg arg arg_kind = kcCheckHsType arg arg_kind
358
359     too_many_args = ptext SLIT("Kind error:") <+> quotes ppr_fun <+>
360                     ptext SLIT("is applied to too many type arguments")
361
362 ---------------------------
363 kcHsContext :: LHsContext Name -> TcM (LHsContext Name)
364 kcHsContext ctxt = wrapLocM (mappM kcHsLPred) ctxt
365
366 kcHsLPred :: LHsPred Name -> TcM (LHsPred Name)
367 kcHsLPred = wrapLocM kcHsPred
368
369 kcHsPred :: HsPred Name -> TcM (HsPred Name)
370 kcHsPred pred   -- Checks that the result is of kind liftedType
371   = kc_pred pred                                `thenM` \ (pred', kind) ->
372     checkExpectedKind pred kind liftedTypeKind  `thenM_` 
373     returnM pred'
374     
375 ---------------------------
376 kc_pred :: HsPred Name -> TcM (HsPred Name, TcKind)     
377         -- Does *not* check for a saturated
378         -- application (reason: used from TcDeriv)
379 kc_pred pred@(HsIParam name ty)
380   = kcHsType ty         `thenM` \ (ty', kind) ->
381     returnM (HsIParam name ty', kind)
382
383 kc_pred pred@(HsClassP cls tys)
384   = kcClass cls                 `thenM` \ kind ->
385     kcApps kind (ppr cls) tys   `thenM` \ (tys', res_kind) ->
386     returnM (HsClassP cls tys', res_kind)
387
388 ---------------------------
389 kcTyVar :: Name -> TcM TcKind
390 kcTyVar name    -- Could be a tyvar or a tycon
391   = traceTc (text "lk1" <+> ppr name)   `thenM_`
392     tcLookup name       `thenM` \ thing ->
393     traceTc (text "lk2" <+> ppr name <+> ppr thing)     `thenM_`
394     case thing of 
395         ATyVar _ ty             -> returnM (typeKind ty)
396         AThing kind             -> returnM kind
397         AGlobal (ATyCon tc)     -> returnM (tyConKind tc) 
398         other                   -> wrongThingErr "type" thing name
399
400 kcClass :: Name -> TcM TcKind
401 kcClass cls     -- Must be a class
402   = tcLookup cls                                `thenM` \ thing -> 
403     case thing of
404         AThing kind             -> returnM kind
405         AGlobal (AClass cls)    -> returnM (tyConKind (classTyCon cls))
406         other                   -> wrongThingErr "class" thing cls
407 \end{code}
408
409
410 %************************************************************************
411 %*                                                                      *
412                 Desugaring
413 %*                                                                      *
414 %************************************************************************
415
416 The type desugarer
417
418         * Transforms from HsType to Type
419         * Zonks any kinds
420
421 It cannot fail, and does no validity checking, except for 
422 structural matters, such as spurious ! annotations.
423
424 \begin{code}
425 dsHsType :: LHsType Name -> TcM Type
426 -- All HsTyVarBndrs in the intput type are kind-annotated
427 dsHsType ty = ds_type (unLoc ty)
428
429 ds_type ty@(HsTyVar name)
430   = ds_app ty []
431
432 ds_type (HsParTy ty)            -- Remove the parentheses markers
433   = dsHsType ty
434
435 ds_type ty@(HsBangTy _ _)       -- No bangs should be here
436   = failWithTc (ptext SLIT("Unexpected strictness annotation:") <+> ppr ty)
437
438 ds_type (HsKindSig ty k)
439   = dsHsType ty -- Kind checking done already
440
441 ds_type (HsListTy ty)
442   = dsHsType ty                         `thenM` \ tau_ty ->
443     returnM (mkListTy tau_ty)
444
445 ds_type (HsPArrTy ty)
446   = dsHsType ty                         `thenM` \ tau_ty ->
447     returnM (mkPArrTy tau_ty)
448
449 ds_type (HsTupleTy boxity tys)
450   = dsHsTypes tys                       `thenM` \ tau_tys ->
451     returnM (mkTupleTy boxity (length tys) tau_tys)
452
453 ds_type (HsFunTy ty1 ty2)
454   = dsHsType ty1                        `thenM` \ tau_ty1 ->
455     dsHsType ty2                        `thenM` \ tau_ty2 ->
456     returnM (mkFunTy tau_ty1 tau_ty2)
457
458 ds_type (HsOpTy ty1 (L span op) ty2)
459   = dsHsType ty1                `thenM` \ tau_ty1 ->
460     dsHsType ty2                `thenM` \ tau_ty2 ->
461     setSrcSpan span (ds_var_app op [tau_ty1,tau_ty2])
462
463 ds_type (HsNumTy n)
464   = ASSERT(n==1)
465     tcLookupTyCon genUnitTyConName      `thenM` \ tc ->
466     returnM (mkTyConApp tc [])
467
468 ds_type ty@(HsAppTy _ _)
469   = ds_app ty []
470
471 ds_type (HsPredTy pred)
472   = dsHsPred pred       `thenM` \ pred' ->
473     returnM (mkPredTy pred')
474
475 ds_type full_ty@(HsForAllTy exp tv_names ctxt ty)
476   = tcTyVarBndrs tv_names               $ \ tyvars ->
477     mappM dsHsLPred (unLoc ctxt)        `thenM` \ theta ->
478     dsHsType ty                         `thenM` \ tau ->
479     returnM (mkSigmaTy tyvars theta tau)
480
481 dsHsTypes arg_tys = mappM dsHsType arg_tys
482 \end{code}
483
484 Help functions for type applications
485 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
486
487 \begin{code}
488 ds_app :: HsType Name -> [LHsType Name] -> TcM Type
489 ds_app (HsAppTy ty1 ty2) tys
490   = ds_app (unLoc ty1) (ty2:tys)
491
492 ds_app ty tys
493   = dsHsTypes tys                       `thenM` \ arg_tys ->
494     case ty of
495         HsTyVar fun -> ds_var_app fun arg_tys
496         other       -> ds_type ty               `thenM` \ fun_ty ->
497                        returnM (mkAppTys fun_ty arg_tys)
498
499 ds_var_app :: Name -> [Type] -> TcM Type
500 ds_var_app name arg_tys 
501  = tcLookup name                        `thenM` \ thing ->
502     case thing of
503         ATyVar _ ty          -> returnM (mkAppTys ty arg_tys)
504         AGlobal (ATyCon tc)  -> returnM (mkGenTyConApp tc arg_tys)
505         other -> pprPanic "ds_app_type" (ppr name <+> ppr arg_tys)
506 \end{code}
507
508
509 Contexts
510 ~~~~~~~~
511
512 \begin{code}
513 dsHsLPred :: LHsPred Name -> TcM PredType
514 dsHsLPred pred = dsHsPred (unLoc pred)
515
516 dsHsPred pred@(HsClassP class_name tys)
517   = dsHsTypes tys                       `thenM` \ arg_tys ->
518     tcLookupClass class_name            `thenM` \ clas ->
519     returnM (ClassP clas arg_tys)
520
521 dsHsPred (HsIParam name ty)
522   = dsHsType ty                                 `thenM` \ arg_ty ->
523     returnM (IParam name arg_ty)
524 \end{code}
525
526 GADT constructor signatures
527
528 \begin{code}
529 tcLHsConSig :: LHsType Name 
530             -> TcM ([TcTyVar], TcThetaType, 
531                     [HsBang], [TcType],
532                     TyCon, [TcType])
533 -- Take apart the type signature for a data constructor
534 -- The difference is that there can be bangs at the top of
535 -- the argument types, and kind-checking is the right place to check
536 tcLHsConSig sig@(L span (HsForAllTy exp tv_names ctxt ty))
537   = setSrcSpan span             $
538     addErrCtxt (gadtSigCtxt sig) $
539     tcTyVarBndrs tv_names       $ \ tyvars ->
540     do  { theta <- mappM dsHsLPred (unLoc ctxt)
541         ; (bangs, arg_tys, tc, res_tys) <- tc_con_sig_tau ty
542         ; return (tyvars, theta, bangs, arg_tys, tc, res_tys) }
543 tcLHsConSig ty 
544   = do  { (bangs, arg_tys, tc, res_tys) <- tc_con_sig_tau ty
545         ; return ([], [], bangs, arg_tys, tc, res_tys) }
546
547 --------
548 tc_con_sig_tau (L _ (HsFunTy arg ty))
549   = do  { (bangs, arg_tys, tc, res_tys) <- tc_con_sig_tau ty
550         ; arg_ty <- tcHsBangType arg
551         ; return (getBangStrictness arg : bangs, 
552                   arg_ty : arg_tys, tc, res_tys) }
553
554 tc_con_sig_tau ty
555   = do  { (tc, res_tys) <- tc_con_res ty []
556         ; return ([], [], tc, res_tys) }
557
558 --------
559 tc_con_res (L _ (HsAppTy fun res_ty)) res_tys
560   = do  { res_ty' <- dsHsType res_ty
561         ; tc_con_res fun (res_ty' : res_tys) }
562
563 tc_con_res ty@(L _ (HsTyVar name)) res_tys
564   = do  { thing <- tcLookup name
565         ; case thing of
566             AGlobal (ATyCon tc) -> return (tc, res_tys)
567             other -> failWithTc (badGadtDecl ty)
568         }
569
570 tc_con_res ty _ = failWithTc (badGadtDecl ty)
571
572 gadtSigCtxt ty
573   = hang (ptext SLIT("In the signature of a data constructor:"))
574        2 (ppr ty)
575 badGadtDecl ty
576   = hang (ptext SLIT("Malformed constructor signature:"))
577        2 (ppr ty)
578 \end{code}
579
580 %************************************************************************
581 %*                                                                      *
582                 Type-variable binders
583 %*                                                                      *
584 %************************************************************************
585
586
587 \begin{code}
588 kcHsTyVars :: [LHsTyVarBndr Name] 
589            -> ([LHsTyVarBndr Name] -> TcM r)    -- These binders are kind-annotated
590                                                 -- They scope over the thing inside
591            -> TcM r
592 kcHsTyVars tvs thing_inside 
593   = mappM (wrapLocM kcHsTyVar) tvs      `thenM` \ bndrs ->
594     tcExtendKindEnv [(n,k) | L _ (KindedTyVar n k) <- bndrs]
595                     (thing_inside bndrs)
596
597 kcHsTyVar :: HsTyVarBndr Name -> TcM (HsTyVarBndr Name)
598         -- Return a *kind-annotated* binder, and a tyvar with a mutable kind in it      
599 kcHsTyVar (UserTyVar name)        = newKindVar  `thenM` \ kind ->
600                                     returnM (KindedTyVar name kind)
601 kcHsTyVar (KindedTyVar name kind) = returnM (KindedTyVar name kind)
602
603 ------------------
604 tcTyVarBndrs :: [LHsTyVarBndr Name]     -- Kind-annotated binders, which need kind-zonking
605              -> ([TyVar] -> TcM r)
606              -> TcM r
607 -- Used when type-checking types/classes/type-decls
608 -- Brings into scope immutable TyVars, not mutable ones that require later zonking
609 tcTyVarBndrs bndrs thing_inside
610   = mapM (zonk . unLoc) bndrs   `thenM` \ tyvars ->
611     tcExtendTyVarEnv tyvars (thing_inside tyvars)
612   where
613     zonk (KindedTyVar name kind) = zonkTcKindToKind kind        `thenM` \ kind' ->
614                                    returnM (mkTyVar name kind')
615     zonk (UserTyVar name) = pprTrace "Un-kinded tyvar" (ppr name) $
616                             returnM (mkTyVar name liftedTypeKind)
617
618 -----------------------------------
619 tcDataKindSig :: Maybe Kind -> TcM [TyVar]
620 -- GADT decls can have a (perhpas partial) kind signature
621 --      e.g.  data T :: * -> * -> * where ...
622 -- This function makes up suitable (kinded) type variables for 
623 -- the argument kinds, and checks that the result kind is indeed *
624 tcDataKindSig Nothing = return []
625 tcDataKindSig (Just kind)
626   = do  { checkTc (isLiftedTypeKind res_kind) (badKindSig kind)
627         ; span <- getSrcSpanM
628         ; us   <- newUniqueSupply 
629         ; let loc   = srcSpanStart span
630               uniqs = uniqsFromSupply us
631         ; return [ mk_tv loc uniq str kind 
632                  | ((kind, str), uniq) <- arg_kinds `zip` names `zip` uniqs ] }
633   where
634     (arg_kinds, res_kind) = splitKindFunTys kind
635     mk_tv loc uniq str kind = mkTyVar name kind
636         where
637            name = mkInternalName uniq occ loc
638            occ  = mkOccName tvName str
639
640     names :: [String]   -- a,b,c...aa,ab,ac etc
641     names = [ c:cs | cs <- "" : names, c <- ['a'..'z'] ] 
642
643 badKindSig :: Kind -> SDoc
644 badKindSig kind 
645  = hang (ptext SLIT("Kind signature on data type declaration has non-* return kind"))
646         2 (ppr kind)
647 \end{code}
648
649
650 %************************************************************************
651 %*                                                                      *
652                 Scoped type variables
653 %*                                                                      *
654 %************************************************************************
655
656
657 tcAddScopedTyVars is used for scoped type variables added by pattern
658 type signatures
659         e.g.  \ ((x::a), (y::a)) -> x+y
660 They never have explicit kinds (because this is source-code only)
661 They are mutable (because they can get bound to a more specific type).
662
663 Usually we kind-infer and expand type splices, and then
664 tupecheck/desugar the type.  That doesn't work well for scoped type
665 variables, because they scope left-right in patterns.  (e.g. in the
666 example above, the 'a' in (y::a) is bound by the 'a' in (x::a).
667
668 The current not-very-good plan is to
669   * find all the types in the patterns
670   * find their free tyvars
671   * do kind inference
672   * bring the kinded type vars into scope
673   * BUT throw away the kind-checked type
674         (we'll kind-check it again when we type-check the pattern)
675
676 This is bad because throwing away the kind checked type throws away
677 its splices.  But too bad for now.  [July 03]
678
679 Historical note:
680     We no longer specify that these type variables must be univerally 
681     quantified (lots of email on the subject).  If you want to put that 
682     back in, you need to
683         a) Do a checkSigTyVars after thing_inside
684         b) More insidiously, don't pass in expected_ty, else
685            we unify with it too early and checkSigTyVars barfs
686            Instead you have to pass in a fresh ty var, and unify
687            it with expected_ty afterwards
688
689 \begin{code}
690 tcPatSigBndrs :: LHsType Name
691               -> TcM ([TcTyVar],        -- Brought into scope
692                       LHsType Name)     -- Kinded, but not yet desugared
693
694 tcPatSigBndrs hs_ty
695   = do  { in_scope <- getInLocalScope
696         ; span <- getSrcSpanM
697         ; let sig_tvs = [ L span (UserTyVar n) 
698                         | n <- nameSetToList (extractHsTyVars hs_ty),
699                           not (in_scope n) ]
700                 -- The tyvars we want are the free type variables of 
701                 -- the type that are not already in scope
702
703         -- Behave like kcHsType on a ForAll type
704         -- i.e. make kinded tyvars with mutable kinds, 
705         --      and kind-check the enclosed types
706         ; (kinded_tvs, kinded_ty) <- kcHsTyVars sig_tvs $ \ kinded_tvs -> do
707                                     { kinded_ty <- kcTypeType hs_ty
708                                     ; return (kinded_tvs, kinded_ty) }
709
710         -- Zonk the mutable kinds and bring the tyvars into scope
711         -- Just like the call to tcTyVarBndrs in ds_type (HsForAllTy case), 
712         -- except that it brings *meta* tyvars into scope, not regular ones
713         --
714         --      [Out of date, but perhaps should be resurrected]
715         -- Furthermore, the tyvars are PatSigTvs, which means that we get better
716         -- error messages when type variables escape:
717         --      Inferred type is less polymorphic than expected
718         --      Quantified type variable `t' escapes
719         --      It is mentioned in the environment:
720         --      t is bound by the pattern type signature at tcfail103.hs:6
721         ; tyvars <- mapM (zonk . unLoc) kinded_tvs
722         ; return (tyvars, kinded_ty) }
723   where
724     zonk (KindedTyVar name kind) = zonkTcKindToKind kind        `thenM` \ kind' ->
725                                    newMetaTyVar name kind' Flexi
726         -- Scoped type variables are bound to a *type*, hence Flexi
727     zonk (UserTyVar name) = pprTrace "Un-kinded tyvar" (ppr name) $
728                             returnM (mkTyVar name liftedTypeKind)
729
730 tcHsPatSigType :: UserTypeCtxt
731                -> LHsType Name          -- The type signature
732                -> TcM ([TcTyVar],       -- Newly in-scope type variables
733                         TcType)         -- The signature
734
735 tcHsPatSigType ctxt hs_ty 
736   = addErrCtxt (pprHsSigCtxt ctxt hs_ty) $
737     do  { (tyvars, kinded_ty) <- tcPatSigBndrs hs_ty
738
739          -- Complete processing of the type, and check its validity
740         ; tcExtendTyVarEnv tyvars $ do
741                 { sig_ty <- tcHsKindedType kinded_ty    
742                 ; checkValidType ctxt sig_ty 
743                 ; return (tyvars, sig_ty) }
744         }
745
746 tcAddLetBoundTyVars :: LHsBinds Name -> TcM a -> TcM a
747 -- Turgid funciton, used for type variables bound by the patterns of a let binding
748
749 tcAddLetBoundTyVars binds thing_inside
750   = go (collectSigTysFromHsBinds (bagToList binds)) thing_inside
751   where
752     go [] thing_inside = thing_inside
753     go (hs_ty:hs_tys) thing_inside
754         = do { (tyvars, _kinded_ty) <- tcPatSigBndrs hs_ty
755              ; tcExtendTyVarEnv tyvars (go hs_tys thing_inside) }
756 \end{code}
757
758
759 %************************************************************************
760 %*                                                                      *
761 \subsection{Signatures}
762 %*                                                                      *
763 %************************************************************************
764
765 @tcSigs@ checks the signatures for validity, and returns a list of
766 {\em freshly-instantiated} signatures.  That is, the types are already
767 split up, and have fresh type variables installed.  All non-type-signature
768 "RenamedSigs" are ignored.
769
770 The @TcSigInfo@ contains @TcTypes@ because they are unified with
771 the variable's type, and after that checked to see whether they've
772 been instantiated.
773
774 \begin{code}
775 data TcSigInfo
776   = TcSigInfo {
777         sig_id     :: TcId,             -- *Polymorphic* binder for this value...
778
779         sig_scoped :: [Name],           -- Names for any scoped type variables
780                                         -- Invariant: correspond 1-1 with an initial
781                                         -- segment of sig_tvs (see Note [Scoped])
782
783         sig_tvs    :: [TcTyVar],        -- Instantiated type variables
784                                         -- See Note [Instantiate sig]
785
786         sig_theta  :: TcThetaType,      -- Instantiated theta
787         sig_tau    :: TcTauType,        -- Instantiated tau
788         sig_loc    :: InstLoc           -- The location of the signature
789     }
790
791 --      Note [Scoped]
792 -- There may be more instantiated type variables than scoped 
793 -- ones.  For example:
794 --      type T a = forall b. b -> (a,b)
795 --      f :: forall c. T c
796 -- Here, the signature for f will have one scoped type variable, c,
797 -- but two instantiated type variables, c' and b'.  
798 --
799 -- We assume that the scoped ones are at the *front* of sig_tvs,
800 -- and remember the names from the original HsForAllTy in sig_scoped
801
802 --      Note [Instantiate sig]
803 -- It's vital to instantiate a type signature with fresh variable.
804 -- For example:
805 --      type S = forall a. a->a
806 --      f,g :: S
807 --      f = ...
808 --      g = ...
809 -- Here, we must use distinct type variables when checking f,g's right hand sides.
810 -- (Instantiation is only necessary because of type synonyms.  Otherwise,
811 -- it's all cool; each signature has distinct type variables from the renamer.)
812
813 type TcSigFun = Name -> Maybe TcSigInfo
814
815 instance Outputable TcSigInfo where
816     ppr (TcSigInfo { sig_id = id, sig_tvs = tyvars, sig_theta = theta, sig_tau = tau})
817         = ppr id <+> ptext SLIT("::") <+> ppr tyvars <+> ppr theta <+> ptext SLIT("=>") <+> ppr tau
818
819 lookupSig :: [TcSigInfo] -> TcSigFun    -- Search for a particular signature
820 lookupSig [] name = Nothing
821 lookupSig (sig : sigs) name
822   | name == idName (sig_id sig) = Just sig
823   | otherwise                   = lookupSig sigs name
824 \end{code}
825