[project @ 2004-04-05 10:52:23 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, tcTyVarBndrs, dsHsType, 
17
18         tcAddScopedTyVars, 
19         
20         TcSigInfo(..), tcTySig, mkTcSig, maybeSig 
21    ) where
22
23 #include "HsVersions.h"
24
25 import HsSyn            ( HsType(..), LHsType, HsTyVarBndr(..), LHsTyVarBndr, 
26                           LHsContext, Sig(..), LSig, HsPred(..), LHsPred )
27 import RnHsSyn          ( extractHsTyVars )
28 import TcHsSyn          ( TcId )
29
30 import TcRnMonad
31 import TcEnv            ( tcExtendTyVarEnv, tcExtendKindEnv,
32                           tcLookup, tcLookupClass, tcLookupTyCon,
33                           TyThing(..), TcTyThing(..), 
34                           getInLocalScope, wrongThingErr
35                         )
36 import TcMType          ( newKindVar, tcInstType, newMutTyVar, 
37                           zonkTcKindToKind, 
38                           checkValidType, UserTypeCtxt(..), pprHsSigCtxt
39                         )
40 import TcUnify          ( unifyFunKind, checkExpectedKind )
41 import TcType           ( Type, PredType(..), ThetaType, TyVarDetails(..),
42                           TcTyVar, TcKind, TcThetaType, TcTauType,
43                           mkTyVarTy, mkTyVarTys, mkFunTy, 
44                           mkForAllTys, mkFunTys, tcEqType, isPredTy,
45                           mkSigmaTy, mkPredTy, mkGenTyConApp, mkTyConApp, mkAppTys, 
46                           tcSplitFunTy_maybe, tcSplitForAllTys )
47 import Kind             ( liftedTypeKind, ubxTupleKind, openTypeKind, argTypeKind )
48 import Inst             ( Inst, InstOrigin(..), newMethod, instToId )
49
50 import Id               ( mkLocalId, idName, idType )
51 import Var              ( TyVar, mkTyVar, tyVarKind )
52 import TyCon            ( TyCon, tyConKind )
53 import Class            ( Class, classTyCon )
54 import Name             ( Name )
55 import NameSet
56 import PrelNames        ( genUnitTyConName )
57 import Subst            ( deShadowTy )
58 import TysWiredIn       ( mkListTy, mkPArrTy, mkTupleTy )
59 import BasicTypes       ( Boxity(..) )
60 import SrcLoc           ( SrcSpan, Located(..), unLoc, noLoc )
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 tcHsSigType ctxt hs_ty 
152   = addErrCtxt (pprHsSigCtxt ctxt hs_ty) $
153     do  { kinded_ty <- kcTypeType hs_ty
154         ; ty <- tcHsKindedType kinded_ty
155         ; checkValidType ctxt ty        
156         ; returnM ty }
157 -- Used for the deriving(...) items
158 tcHsDeriv :: LHsType Name -> TcM ([TyVar], Class, [Type])
159 tcHsDeriv = addLocM (tc_hs_deriv [])
160
161 tc_hs_deriv tv_names (HsPredTy (HsClassP cls_name hs_tys))
162   = kcHsTyVars tv_names                 $ \ tv_names' ->
163     do  { cls_kind <- kcClass cls_name
164         ; (tys, res_kind) <- kcApps cls_kind (ppr cls_name) hs_tys
165         ; tcTyVarBndrs tv_names'        $ \ tyvars ->
166     do  { arg_tys <- dsHsTypes tys
167         ; cls <- tcLookupClass cls_name
168         ; return (tyvars, cls, arg_tys) }}
169
170 tc_hs_deriv tv_names1 (HsForAllTy _ tv_names2 (L _ []) (L _ ty))
171   =     -- Funny newtype deriving form
172         --      forall a. C [a]
173         -- where C has arity 2.  Hence can't use regular functions
174     tc_hs_deriv (tv_names1 ++ tv_names2) ty
175
176 tc_hs_deriv _ other
177   = failWithTc (ptext SLIT("Illegal deriving item") <+> ppr other)
178 \end{code}
179
180         These functions are used during knot-tying in
181         type and class declarations, when we have to
182         separate kind-checking, desugaring, and validity checking
183
184 \begin{code}
185 kcHsSigType, kcHsLiftedSigType :: LHsType Name -> TcM (LHsType Name)
186         -- Used for type signatures
187 kcHsSigType ty       = kcTypeType ty
188 kcHsLiftedSigType ty = kcLiftedType ty
189
190 tcHsKindedType :: LHsType Name -> TcM Type
191   -- Don't do kind checking, nor validity checking, 
192   --    but do hoist for-alls to the top
193   -- This is used in type and class decls, where kinding is
194   -- done in advance, and validity checking is done later
195   -- [Validity checking done later because of knot-tying issues.]
196 tcHsKindedType hs_ty 
197   = do  { ty <- dsHsType hs_ty
198         ; return (hoistForAllTys ty) }
199
200 tcHsKindedContext :: LHsContext Name -> TcM ThetaType
201 -- Used when we are expecting a ClassContext (i.e. no implicit params)
202 -- Does not do validity checking, like tcHsKindedType
203 tcHsKindedContext hs_theta = addLocM (mappM dsHsLPred) hs_theta
204 \end{code}
205
206
207 %************************************************************************
208 %*                                                                      *
209                 The main kind checker: kcHsType
210 %*                                                                      *
211 %************************************************************************
212         
213         First a couple of simple wrappers for kcHsType
214
215 \begin{code}
216 ---------------------------
217 kcLiftedType :: LHsType Name -> TcM (LHsType Name)
218 -- The type ty must be a *lifted* *type*
219 kcLiftedType ty = kcCheckHsType ty liftedTypeKind
220     
221 ---------------------------
222 kcTypeType :: LHsType Name -> TcM (LHsType Name)
223 -- The type ty must be a *type*, but it can be lifted or 
224 -- unlifted or an unboxed tuple.
225 kcTypeType ty = kcCheckHsType ty openTypeKind
226
227 ---------------------------
228 kcCheckHsType :: LHsType Name -> TcKind -> TcM (LHsType Name)
229 -- Check that the type has the specified kind
230 -- Be sure to use checkExpectedKind, rather than simply unifying 
231 -- with OpenTypeKind, because it gives better error messages
232 kcCheckHsType (L span ty) exp_kind 
233   = addSrcSpan span                             $
234     kc_hs_type ty                               `thenM` \ (ty', act_kind) ->
235     checkExpectedKind ty act_kind exp_kind      `thenM_`
236     returnM (L span ty')
237 \end{code}
238
239         Here comes the main function
240
241 \begin{code}
242 kcHsType :: LHsType Name -> TcM (LHsType Name, TcKind)
243 kcHsType ty = wrapLocFstM kc_hs_type ty
244 -- kcHsType *returns* the kind of the type, rather than taking an expected
245 -- kind as argument as tcExpr does.  
246 -- Reasons: 
247 --      (a) the kind of (->) is
248 --              forall bx1 bx2. Type bx1 -> Type bx2 -> Type Boxed
249 --          so we'd need to generate huge numbers of bx variables.
250 --      (b) kinds are so simple that the error messages are fine
251 --
252 -- The translated type has explicitly-kinded type-variable binders
253
254 kc_hs_type (HsParTy ty)
255  = kcHsType ty          `thenM` \ (ty', kind) ->
256    returnM (HsParTy ty', kind)
257
258 -- kcHsType (HsSpliceTy s)
259 --   = kcSpliceType s)
260
261 kc_hs_type (HsTyVar name)
262   = kcTyVar name        `thenM` \ kind ->
263     returnM (HsTyVar name, kind)
264
265 kc_hs_type (HsListTy ty) 
266   = kcLiftedType ty                     `thenM` \ ty' ->
267     returnM (HsListTy ty', liftedTypeKind)
268
269 kc_hs_type (HsPArrTy ty)
270   = kcLiftedType ty                     `thenM` \ ty' ->
271     returnM (HsPArrTy ty', liftedTypeKind)
272
273 kc_hs_type (HsNumTy n)
274    = returnM (HsNumTy n, liftedTypeKind)
275
276 kc_hs_type (HsKindSig ty k) 
277   = kcCheckHsType ty k  `thenM` \ ty' ->
278     returnM (HsKindSig ty' k, k)
279
280 kc_hs_type (HsTupleTy Boxed tys)
281   = mappM kcLiftedType tys      `thenM` \ tys' ->
282     returnM (HsTupleTy Boxed tys', liftedTypeKind)
283
284 kc_hs_type (HsTupleTy Unboxed tys)
285   = mappM kcTypeType tys        `thenM` \ tys' ->
286     returnM (HsTupleTy Unboxed tys', ubxTupleKind)
287
288 kc_hs_type (HsFunTy ty1 ty2)
289   = kcCheckHsType ty1 argTypeKind       `thenM` \ ty1' ->
290     kcTypeType ty2                      `thenM` \ ty2' ->
291     returnM (HsFunTy ty1' ty2', liftedTypeKind)
292
293 kc_hs_type ty@(HsOpTy ty1 op ty2)
294   = addLocM kcTyVar op                  `thenM` \ op_kind ->
295     kcApps op_kind (ppr op) [ty1,ty2]   `thenM` \ ([ty1',ty2'], res_kind) ->
296     returnM (HsOpTy ty1' op ty2', res_kind)
297
298 kc_hs_type ty@(HsAppTy ty1 ty2)
299   = kcHsType fun_ty                       `thenM` \ (fun_ty', fun_kind) ->
300     kcApps fun_kind (ppr fun_ty) arg_tys  `thenM` \ ((arg_ty':arg_tys'), res_kind) ->
301     returnM (foldl mk_app (HsAppTy fun_ty' arg_ty') arg_tys', res_kind)
302   where
303     (fun_ty, arg_tys) = split ty1 [ty2]
304     split (L _ (HsAppTy f a)) as = split f (a:as)
305     split f                   as = (f,as)
306     mk_app fun arg = HsAppTy (noLoc fun) arg    -- Add noLocs for inner nodes of
307                                                 -- the application; they are never used
308     
309 kc_hs_type (HsPredTy pred)
310   = kcHsPred pred               `thenM` \ pred' ->
311     returnM (HsPredTy pred', liftedTypeKind)
312
313 kc_hs_type (HsForAllTy exp tv_names context ty)
314   = kcHsTyVars tv_names         $ \ tv_names' ->
315     kcHsContext context         `thenM` \ ctxt' ->
316     kcHsType ty                 `thenM` \ (ty', kind) ->
317         -- The body of a forall is usually a type, but in principle
318         -- there's no reason to prohibit *unlifted* types.
319         -- In fact, GHC can itself construct a function with an
320         -- unboxed tuple inside a for-all (via CPR analyis; see 
321         -- typecheck/should_compile/tc170)
322         --
323         -- Furthermore, in newtype deriving we allow
324         --      deriving( forall a. C [a] )
325         -- where C :: *->*->*, so it's awkward to prohibit higher-kinded
326         -- bodies.  In any case, if there is a higher-kinded body
327         -- and we propagate that up, the caller will find any bugs.
328     returnM (HsForAllTy exp tv_names' ctxt' ty', kind)
329
330 ---------------------------
331 kcApps :: TcKind                        -- Function kind
332        -> SDoc                          -- Function 
333        -> [LHsType Name]                -- Arg types
334        -> TcM ([LHsType Name], TcKind)  -- Kind-checked args
335 kcApps fun_kind ppr_fun args
336   = split_fk fun_kind (length args)     `thenM` \ (arg_kinds, res_kind) ->
337     zipWithM kc_arg args arg_kinds      `thenM` \ args' ->
338     returnM (args', res_kind)
339   where
340     split_fk fk 0 = returnM ([], fk)
341     split_fk fk n = unifyFunKind fk     `thenM` \ mb_fk ->
342                     case mb_fk of 
343                         Nothing       -> failWithTc too_many_args 
344                         Just (ak,fk') -> split_fk fk' (n-1)     `thenM` \ (aks, rk) ->
345                                          returnM (ak:aks, rk)
346
347     kc_arg arg arg_kind = kcCheckHsType arg arg_kind
348
349     too_many_args = ptext SLIT("Kind error:") <+> quotes ppr_fun <+>
350                     ptext SLIT("is applied to too many type arguments")
351
352 ---------------------------
353 kcHsContext :: LHsContext Name -> TcM (LHsContext Name)
354 kcHsContext ctxt = wrapLocM (mappM kcHsLPred) ctxt
355
356 kcHsLPred :: LHsPred Name -> TcM (LHsPred Name)
357 kcHsLPred = wrapLocM kcHsPred
358
359 kcHsPred :: HsPred Name -> TcM (HsPred Name)
360 kcHsPred pred   -- Checks that the result is of kind liftedType
361   = kc_pred pred                                `thenM` \ (pred', kind) ->
362     checkExpectedKind pred kind liftedTypeKind  `thenM_` 
363     returnM pred'
364     
365 ---------------------------
366 kc_pred :: HsPred Name -> TcM (HsPred Name, TcKind)     
367         -- Does *not* check for a saturated
368         -- application (reason: used from TcDeriv)
369 kc_pred pred@(HsIParam name ty)
370   = kcHsType ty         `thenM` \ (ty', kind) ->
371     returnM (HsIParam name ty', kind)
372
373 kc_pred pred@(HsClassP cls tys)
374   = kcClass cls                 `thenM` \ kind ->
375     kcApps kind (ppr cls) tys   `thenM` \ (tys', res_kind) ->
376     returnM (HsClassP cls tys', res_kind)
377
378 ---------------------------
379 kcTyVar :: Name -> TcM TcKind
380 kcTyVar name    -- Could be a tyvar or a tycon
381   = traceTc (text "lk1" <+> ppr name)   `thenM_`
382     tcLookup name       `thenM` \ thing ->
383     traceTc (text "lk2" <+> ppr name <+> ppr thing)     `thenM_`
384     case thing of 
385         ATyVar tv               -> returnM (tyVarKind tv)
386         AThing kind             -> returnM kind
387         AGlobal (ATyCon tc)     -> returnM (tyConKind tc) 
388         other                   -> wrongThingErr "type" thing name
389
390 kcClass :: Name -> TcM TcKind
391 kcClass cls     -- Must be a class
392   = tcLookup cls                                `thenM` \ thing -> 
393     case thing of
394         AThing kind             -> returnM kind
395         AGlobal (AClass cls)    -> returnM (tyConKind (classTyCon cls))
396         other                   -> wrongThingErr "class" thing cls
397 \end{code}
398
399
400 %************************************************************************
401 %*                                                                      *
402                 Desugaring
403 %*                                                                      *
404 %************************************************************************
405
406 The type desugarer
407
408         * Transforms from HsType to Type
409         * Zonks any kinds
410
411 It cannot fail, and does no validity checking
412
413 \begin{code}
414 dsHsType :: LHsType Name -> TcM Type
415 -- All HsTyVarBndrs in the intput type are kind-annotated
416 dsHsType ty = ds_type (unLoc ty)
417
418 ds_type ty@(HsTyVar name)
419   = ds_app ty []
420
421 ds_type (HsParTy ty)            -- Remove the parentheses markers
422   = dsHsType ty
423
424 ds_type (HsKindSig ty k)
425   = dsHsType ty -- Kind checking done already
426
427 ds_type (HsListTy ty)
428   = dsHsType ty                         `thenM` \ tau_ty ->
429     returnM (mkListTy tau_ty)
430
431 ds_type (HsPArrTy ty)
432   = dsHsType ty                         `thenM` \ tau_ty ->
433     returnM (mkPArrTy tau_ty)
434
435 ds_type (HsTupleTy boxity tys)
436   = dsHsTypes tys                       `thenM` \ tau_tys ->
437     returnM (mkTupleTy boxity (length tys) tau_tys)
438
439 ds_type (HsFunTy ty1 ty2)
440   = dsHsType ty1                        `thenM` \ tau_ty1 ->
441     dsHsType ty2                        `thenM` \ tau_ty2 ->
442     returnM (mkFunTy tau_ty1 tau_ty2)
443
444 ds_type (HsOpTy ty1 (L span op) ty2)
445   = dsHsType ty1                `thenM` \ tau_ty1 ->
446     dsHsType ty2                `thenM` \ tau_ty2 ->
447     addSrcSpan span (ds_var_app op [tau_ty1,tau_ty2])
448
449 ds_type (HsNumTy n)
450   = ASSERT(n==1)
451     tcLookupTyCon genUnitTyConName      `thenM` \ tc ->
452     returnM (mkTyConApp tc [])
453
454 ds_type ty@(HsAppTy _ _)
455   = ds_app ty []
456
457 ds_type (HsPredTy pred)
458   = dsHsPred pred       `thenM` \ pred' ->
459     returnM (mkPredTy pred')
460
461 ds_type full_ty@(HsForAllTy exp tv_names ctxt ty)
462   = tcTyVarBndrs tv_names               $ \ tyvars ->
463     mappM dsHsLPred (unLoc ctxt)        `thenM` \ theta ->
464     dsHsType ty                         `thenM` \ tau ->
465     returnM (mkSigmaTy tyvars theta tau)
466
467 dsHsTypes arg_tys = mappM dsHsType arg_tys
468 \end{code}
469
470 Help functions for type applications
471 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
472
473 \begin{code}
474 ds_app :: HsType Name -> [LHsType Name] -> TcM Type
475 ds_app (HsAppTy ty1 ty2) tys
476   = ds_app (unLoc ty1) (ty2:tys)
477
478 ds_app ty tys
479   = dsHsTypes tys                       `thenM` \ arg_tys ->
480     case ty of
481         HsTyVar fun -> ds_var_app fun arg_tys
482         other       -> ds_type ty               `thenM` \ fun_ty ->
483                        returnM (mkAppTys fun_ty arg_tys)
484
485 ds_var_app :: Name -> [Type] -> TcM Type
486 ds_var_app name arg_tys 
487  = tcLookup name                        `thenM` \ thing ->
488     case thing of
489         ATyVar tv            -> returnM (mkAppTys (mkTyVarTy tv) arg_tys)
490         AGlobal (ATyCon tc)  -> returnM (mkGenTyConApp tc arg_tys)
491         AThing _             -> tcLookupTyCon name      `thenM` \ tc ->
492                                 returnM (mkGenTyConApp tc arg_tys)
493         other -> pprPanic "ds_app_type" (ppr name <+> ppr arg_tys)
494 \end{code}
495
496
497 Contexts
498 ~~~~~~~~
499 \begin{code}
500 dsHsLPred :: LHsPred Name -> TcM PredType
501 dsHsLPred pred = dsHsPred (unLoc pred)
502
503 dsHsPred pred@(HsClassP class_name tys)
504   = dsHsTypes tys                       `thenM` \ arg_tys ->
505     tcLookupClass class_name            `thenM` \ clas ->
506     returnM (ClassP clas arg_tys)
507
508 dsHsPred (HsIParam name ty)
509   = dsHsType ty                                 `thenM` \ arg_ty ->
510     returnM (IParam name arg_ty)
511 \end{code}
512
513
514 %************************************************************************
515 %*                                                                      *
516                 Type-variable binders
517 %*                                                                      *
518 %************************************************************************
519
520
521 \begin{code}
522 kcHsTyVars :: [LHsTyVarBndr Name] 
523            -> ([LHsTyVarBndr Name] -> TcM r)    -- These binders are kind-annotated
524                                                 -- They scope over the thing inside
525            -> TcM r
526 kcHsTyVars tvs thing_inside 
527   = mappM (wrapLocM kcHsTyVar) tvs      `thenM` \ bndrs ->
528     tcExtendKindEnv [(n,k) | L _ (KindedTyVar n k) <- bndrs]
529                     (thing_inside bndrs)
530
531 kcHsTyVar :: HsTyVarBndr Name -> TcM (HsTyVarBndr Name)
532         -- Return a *kind-annotated* binder, and a tyvar with a mutable kind in it      
533 kcHsTyVar (UserTyVar name)        = newKindVar  `thenM` \ kind ->
534                                     returnM (KindedTyVar name kind)
535 kcHsTyVar (KindedTyVar name kind) = returnM (KindedTyVar name kind)
536
537 ------------------
538 tcTyVarBndrs :: [LHsTyVarBndr Name]     -- Kind-annotated binders, which need kind-zonking
539              -> ([TyVar] -> TcM r)
540              -> TcM r
541 -- Used when type-checking types/classes/type-decls
542 -- Brings into scope immutable TyVars, not mutable ones that require later zonking
543 tcTyVarBndrs bndrs thing_inside
544   = mapM (zonk . unLoc) bndrs   `thenM` \ tyvars ->
545     tcExtendTyVarEnv tyvars (thing_inside tyvars)
546   where
547     zonk (KindedTyVar name kind) = zonkTcKindToKind kind        `thenM` \ kind' ->
548                                    returnM (mkTyVar name kind')
549     zonk (UserTyVar name) = pprTrace "BAD: Un-kinded tyvar" (ppr name) $
550                             returnM (mkTyVar name liftedTypeKind)
551 \end{code}
552
553
554 %************************************************************************
555 %*                                                                      *
556                 Scoped type variables
557 %*                                                                      *
558 %************************************************************************
559
560
561 tcAddScopedTyVars is used for scoped type variables added by pattern
562 type signatures
563         e.g.  \ ((x::a), (y::a)) -> x+y
564 They never have explicit kinds (because this is source-code only)
565 They are mutable (because they can get bound to a more specific type).
566
567 Usually we kind-infer and expand type splices, and then
568 tupecheck/desugar the type.  That doesn't work well for scoped type
569 variables, because they scope left-right in patterns.  (e.g. in the
570 example above, the 'a' in (y::a) is bound by the 'a' in (x::a).
571
572 The current not-very-good plan is to
573   * find all the types in the patterns
574   * find their free tyvars
575   * do kind inference
576   * bring the kinded type vars into scope
577   * BUT throw away the kind-checked type
578         (we'll kind-check it again when we type-check the pattern)
579
580 This is bad because throwing away the kind checked type throws away
581 its splices.  But too bad for now.  [July 03]
582
583 Historical note:
584     We no longer specify that these type variables must be univerally 
585     quantified (lots of email on the subject).  If you want to put that 
586     back in, you need to
587         a) Do a checkSigTyVars after thing_inside
588         b) More insidiously, don't pass in expected_ty, else
589            we unify with it too early and checkSigTyVars barfs
590            Instead you have to pass in a fresh ty var, and unify
591            it with expected_ty afterwards
592
593 \begin{code}
594 tcAddScopedTyVars :: [LHsType Name] -> TcM a -> TcM a
595 tcAddScopedTyVars [] thing_inside
596   = thing_inside        -- Quick get-out for the empty case
597
598 tcAddScopedTyVars sig_tys thing_inside
599   = getInLocalScope                     `thenM` \ in_scope ->
600     getSrcSpanM                         `thenM` \ span ->
601     let
602         sig_tvs = [ L span (UserTyVar n) 
603                   | ty <- sig_tys,
604                     n <- nameSetToList (extractHsTyVars ty),
605                     not (in_scope n) ]
606         -- The tyvars we want are the free type variables of 
607         -- the type that are not already in scope
608     in        
609         -- Behave like kcHsType on a ForAll type
610         -- i.e. make kinded tyvars with mutable kinds, 
611         --      and kind-check the enclosed types
612     kcHsTyVars sig_tvs (\ kinded_tvs -> do
613                             { mappM kcTypeType sig_tys
614                             ; return kinded_tvs })      `thenM` \ kinded_tvs ->
615
616         -- Zonk the mutable kinds and bring the tyvars into scope
617         -- Rather like tcTyVarBndrs, except that it brings *mutable* 
618         -- tyvars into scope, not immutable ones
619         --
620         -- Furthermore, the tyvars are PatSigTvs, which means that we get better
621         -- error messages when type variables escape:
622         --      Inferred type is less polymorphic than expected
623         --      Quantified type variable `t' escapes
624         --      It is mentioned in the environment:
625         --      t is bound by the pattern type signature at tcfail103.hs:6
626     mapM (zonk . unLoc) kinded_tvs      `thenM` \ tyvars ->
627     tcExtendTyVarEnv tyvars thing_inside
628
629   where
630     zonk (KindedTyVar name kind) = zonkTcKindToKind kind        `thenM` \ kind' ->
631                                    newMutTyVar name kind' PatSigTv
632     zonk (UserTyVar name) = pprTrace "BAD: Un-kinded tyvar" (ppr name) $
633                             returnM (mkTyVar name liftedTypeKind)
634 \end{code}
635
636
637 %************************************************************************
638 %*                                                                      *
639 \subsection{Signatures}
640 %*                                                                      *
641 %************************************************************************
642
643 @tcSigs@ checks the signatures for validity, and returns a list of
644 {\em freshly-instantiated} signatures.  That is, the types are already
645 split up, and have fresh type variables installed.  All non-type-signature
646 "RenamedSigs" are ignored.
647
648 The @TcSigInfo@ contains @TcTypes@ because they are unified with
649 the variable's type, and after that checked to see whether they've
650 been instantiated.
651
652 \begin{code}
653 data TcSigInfo
654   = TySigInfo {
655         sig_poly_id :: TcId,    -- *Polymorphic* binder for this value...
656                                 -- Has name = N
657
658         sig_tvs   :: [TcTyVar],         -- tyvars
659         sig_theta :: TcThetaType,       -- theta
660         sig_tau   :: TcTauType,         -- tau
661
662         sig_mono_id :: TcId,    -- *Monomorphic* binder for this value
663                                 -- Does *not* have name = N
664                                 -- Has type tau
665
666         sig_insts :: [Inst],    -- Empty if theta is null, or
667                                 -- (method mono_id) otherwise
668
669         sig_loc :: SrcSpan      -- The location of the signature
670     }
671
672
673 instance Outputable TcSigInfo where
674     ppr (TySigInfo id tyvars theta tau _ inst _) =
675         ppr id <+> ptext SLIT("::") <+> ppr tyvars <+> ppr theta <+> ptext SLIT("=>") <+> ppr tau
676
677 maybeSig :: [TcSigInfo] -> Name -> Maybe (TcSigInfo)
678         -- Search for a particular signature
679 maybeSig [] name = Nothing
680 maybeSig (sig@(TySigInfo sig_id _ _ _ _ _ _) : sigs) name
681   | name == idName sig_id = Just sig
682   | otherwise             = maybeSig sigs name
683 \end{code}
684
685
686 \begin{code}
687 tcTySig :: LSig Name -> TcM TcSigInfo
688
689 tcTySig (L span (Sig (L _ v) ty))
690  = addSrcSpan span                      $
691    tcHsSigType (FunSigCtxt v) ty        `thenM` \ sigma_tc_ty ->
692    mkTcSig (mkLocalId v sigma_tc_ty)    `thenM` \ sig -> 
693    returnM sig
694
695 mkTcSig :: TcId -> TcM TcSigInfo
696 mkTcSig poly_id
697   =     -- Instantiate this type
698         -- It's important to do this even though in the error-free case
699         -- we could just split the sigma_tc_ty (since the tyvars don't
700         -- unified with anything).  But in the case of an error, when
701         -- the tyvars *do* get unified with something, we want to carry on
702         -- typechecking the rest of the program with the function bound
703         -- to a pristine type, namely sigma_tc_ty
704    tcInstType SigTv (idType poly_id)            `thenM` \ (tyvars', theta', tau') ->
705
706    getInstLoc SignatureOrigin                   `thenM` \ inst_loc ->
707    newMethod inst_loc poly_id
708              (mkTyVarTys tyvars')
709              theta' tau'                        `thenM` \ inst ->
710         -- We make a Method even if it's not overloaded; no harm
711         -- But do not extend the LIE!  We're just making an Id.
712         
713    getSrcSpanM                                  `thenM` \ src_loc ->
714    returnM (TySigInfo { sig_poly_id = poly_id, sig_tvs = tyvars', 
715                         sig_theta = theta', sig_tau = tau', 
716                         sig_mono_id = instToId inst,
717                         sig_insts = [inst], sig_loc = src_loc })
718 \end{code}
719
720
721 %************************************************************************
722 %*                                                                      *
723 \subsection{Errors and contexts}
724 %*                                                                      *
725 %************************************************************************
726
727
728 \begin{code}
729 hoistForAllTys :: Type -> Type
730 -- Used for user-written type signatures only
731 -- Move all the foralls and constraints to the top
732 -- e.g.  T -> forall a. a        ==>   forall a. T -> a
733 --       T -> (?x::Int) -> Int   ==>   (?x::Int) -> T -> Int
734 --
735 -- Also: eliminate duplicate constraints.  These can show up
736 -- when hoisting constraints, notably implicit parameters.
737 --
738 -- We want to 'look through' type synonyms when doing this
739 -- so it's better done on the Type than the HsType
740
741 hoistForAllTys ty
742   = let
743         no_shadow_ty = deShadowTy ty
744         -- Running over ty with an empty substitution gives it the
745         -- no-shadowing property.  This is important.  For example:
746         --      type Foo r = forall a. a -> r
747         --      foo :: Foo (Foo ())
748         -- Here the hoisting should give
749         --      foo :: forall a a1. a -> a1 -> ()
750         --
751         -- What about type vars that are lexically in scope in the envt?
752         -- We simply rely on them having a different unique to any
753         -- binder in 'ty'.  Otherwise we'd have to slurp the in-scope-tyvars
754         -- out of the envt, which is boring and (I think) not necessary.
755     in
756     case hoist no_shadow_ty of 
757         (tvs, theta, body) -> mkForAllTys tvs (mkFunTys (nubBy tcEqType theta) body)
758                 -- The 'nubBy' eliminates duplicate constraints,
759                 -- notably implicit parameters
760   where
761     hoist ty
762         | (tvs1, body_ty) <- tcSplitForAllTys ty,
763           not (null tvs1)
764         = case hoist body_ty of
765                 (tvs2,theta,tau) -> (tvs1 ++ tvs2, theta, tau)
766
767         | Just (arg, res) <- tcSplitFunTy_maybe ty
768         = let
769               arg' = hoistForAllTys arg -- Don't forget to apply hoist recursively
770           in                            -- to the argument type
771           if (isPredTy arg') then
772             case hoist res of
773                 (tvs,theta,tau) -> (tvs, arg':theta, tau)
774           else
775              case hoist res of
776                 (tvs,theta,tau) -> (tvs, theta, mkFunTy arg' tau)
777
778         | otherwise = ([], [], ty)
779 \end{code}
780