[project @ 2002-02-11 15:16:25 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 ( tcHsSigType, tcHsType, tcIfaceType, tcHsTheta, tcHsPred,
8                     UserTypeCtxt(..),
9
10                         -- Kind checking
11                     kcHsTyVar, kcHsTyVars, mkTyClTyVars,
12                     kcHsType, kcHsSigType, kcHsSigTypes, 
13                     kcHsLiftedSigType, kcHsContext,
14                     tcAddScopedTyVars, tcHsTyVars, mkImmutTyVars,
15
16                     TcSigInfo(..), tcTySig, mkTcSig, maybeSig
17                   ) where
18
19 #include "HsVersions.h"
20
21 import HsSyn            ( HsType(..), HsTyVarBndr(..),
22                           Sig(..), HsPred(..), pprParendHsType, HsTupCon(..), hsTyVarNames )
23 import RnHsSyn          ( RenamedHsType, RenamedHsPred, RenamedContext, RenamedSig, extractHsTyVars )
24 import TcHsSyn          ( TcId )
25
26 import TcMonad
27 import TcEnv            ( tcExtendTyVarEnv, tcLookup, tcLookupGlobal,
28                           tcInLocalScope,
29                           TyThing(..), TcTyThing(..), tcExtendKindEnv
30                         )
31 import TcMType          ( newKindVar, zonkKindEnv, tcInstSigType,
32                           checkValidType, UserTypeCtxt(..), pprUserTypeCtxt
33                         )
34 import TcUnify          ( unifyKind, unifyOpenTypeKind )
35 import TcType           ( Type, Kind, SourceType(..), ThetaType, TyVarDetails(..),
36                           TcTyVar, TcKind, TcThetaType, TcTauType,
37                           mkTyVarTy, mkTyVarTys, mkFunTy, mkSynTy,
38                           hoistForAllTys, zipFunTys, 
39                           mkSigmaTy, mkPredTy, mkTyConApp, mkAppTys, 
40                           liftedTypeKind, unliftedTypeKind, mkArrowKind,
41                           mkArrowKinds, tcSplitFunTy_maybe
42                         )
43 import Inst             ( Inst, InstOrigin(..), newMethodWithGivenTy, instToId )
44
45 import Id               ( mkLocalId, idName, idType )
46 import Var              ( TyVar, mkTyVar, tyVarKind )
47 import ErrUtils         ( Message )
48 import TyCon            ( TyCon, isSynTyCon, tyConKind )
49 import Class            ( classTyCon )
50 import Name             ( Name )
51 import NameSet
52 import TysWiredIn       ( mkListTy, mkPArrTy, mkTupleTy, genUnitTyCon )
53 import BasicTypes       ( Boxity(..) )
54 import SrcLoc           ( SrcLoc )
55 import Util             ( lengthIs )
56 import Outputable
57
58 \end{code}
59
60
61 %************************************************************************
62 %*                                                                      *
63 \subsection{Checking types}
64 %*                                                                      *
65 %************************************************************************
66
67 Generally speaking we now type-check types in three phases
68
69         1.  Kind check the HsType [kcHsType]
70         2.  Convert from HsType to Type, and hoist the foralls [tcHsType]
71         3.  Check the validity of the resulting type [checkValidType]
72
73 Often these steps are done one after the othe (tcHsSigType).
74 But in mutually recursive groups of type and class decls we do
75         1 kind-check the whole group
76         2 build TyCons/Classes in a knot-tied wa
77         3 check the validity of types in the now-unknotted TyCons/Classes
78
79 \begin{code}
80 tcHsSigType :: UserTypeCtxt -> RenamedHsType -> TcM Type
81   -- Do kind checking, and hoist for-alls to the top
82 tcHsSigType ctxt ty = tcAddErrCtxt (checkTypeCtxt ctxt ty) (
83                         kcTypeType ty           `thenTc_`
84                         tcHsType ty
85                       )                         `thenTc` \ ty' ->
86                       checkValidType ctxt ty'   `thenTc_`
87                       returnTc ty'
88
89 checkTypeCtxt ctxt ty
90   = vcat [ptext SLIT("In the type:") <+> ppr ty,
91           ptext SLIT("While checking") <+> pprUserTypeCtxt ctxt ]
92
93 tcHsType    :: RenamedHsType -> TcM Type
94   -- Don't do kind checking, nor validity checking, 
95   --    but do hoist for-alls to the top
96   -- This is used in type and class decls, where kinding is
97   -- done in advance, and validity checking is done later
98   -- [Validity checking done later because of knot-tying issues.]
99 tcHsType ty = tc_type ty  `thenTc` \ ty' ->  
100               returnTc (hoistForAllTys ty')
101
102 tcHsTheta :: RenamedContext -> TcM ThetaType
103 -- Used when we are expecting a ClassContext (i.e. no implicit params)
104 -- Does not do validity checking, like tcHsType
105 tcHsTheta hs_theta = mapTc tc_pred hs_theta
106
107 -- In interface files the type is already kinded,
108 -- and we definitely don't want to hoist for-alls.
109 -- Otherwise we'll change
110 --      dmfail :: forall m:(*->*) Monad m => forall a:* => String -> m a
111 -- into 
112 --      dmfail :: forall m:(*->*) a:* Monad m => String -> m a
113 -- which definitely isn't right!
114 tcIfaceType ty = tc_type ty
115 \end{code}
116
117
118 %************************************************************************
119 %*                                                                      *
120 \subsection{Kind checking}
121 %*                                                                      *
122 %************************************************************************
123
124 Kind checking
125 ~~~~~~~~~~~~~
126 When we come across the binding site for some type variables, we
127 proceed in two stages
128
129 1. Figure out what kind each tyvar has
130
131 2. Create suitably-kinded tyvars, 
132    extend the envt, 
133    and typecheck the body
134
135 To do step 1, we proceed thus:
136
137 1a. Bind each type variable to a kind variable
138 1b. Apply the kind checker
139 1c. Zonk the resulting kinds
140
141 The kind checker is passed to tcHsTyVars as an argument.  
142
143 For example, when we find
144         (forall a m. m a -> m a)
145 we bind a,m to kind varibles and kind-check (m a -> m a).  This
146 makes a get kind *, and m get kind *->*.  Now we typecheck (m a -> m a)
147 in an environment that binds a and m suitably.
148
149 The kind checker passed to tcHsTyVars needs to look at enough to
150 establish the kind of the tyvar:
151   * For a group of type and class decls, it's just the group, not
152         the rest of the program
153   * For a tyvar bound in a pattern type signature, its the types
154         mentioned in the other type signatures in that bunch of patterns
155   * For a tyvar bound in a RULE, it's the type signatures on other
156         universally quantified variables in the rule
157
158 Note that this may occasionally give surprising results.  For example:
159
160         data T a b = MkT (a b)
161
162 Here we deduce                  a::*->*, b::*.
163 But equally valid would be
164                                 a::(*->*)-> *, b::*->*
165
166 \begin{code}
167 -- tcHsTyVars is used for type variables in type signatures
168 --      e.g. forall a. a->a
169 -- They are immutable, because they scope only over the signature
170 -- They may or may not be explicitly-kinded
171 tcHsTyVars :: [HsTyVarBndr Name] 
172            -> TcM a                             -- The kind checker
173            -> ([TyVar] -> TcM b)
174            -> TcM b
175
176 tcHsTyVars [] kind_check thing_inside = thing_inside []
177         -- A useful short cut for a common case!
178   
179 tcHsTyVars tv_names kind_check thing_inside
180   = kcHsTyVars tv_names                                 `thenNF_Tc` \ tv_names_w_kinds ->
181     tcExtendKindEnv tv_names_w_kinds kind_check         `thenTc_`
182     zonkKindEnv tv_names_w_kinds                        `thenNF_Tc` \ tvs_w_kinds ->
183     let
184         tyvars = mkImmutTyVars tvs_w_kinds
185     in
186     tcExtendTyVarEnv tyvars (thing_inside tyvars)
187
188
189
190 tcAddScopedTyVars :: [RenamedHsType] -> TcM a -> TcM a
191 -- tcAddScopedTyVars is used for scoped type variables
192 -- added by pattern type signatures
193 --      e.g.  \ (x::a) (y::a) -> x+y
194 -- They never have explicit kinds (because this is source-code only)
195 -- They are mutable (because they can get bound to a more specific type)
196
197 -- Find the not-already-in-scope signature type variables,
198 -- kind-check them, and bring them into scope
199 --
200 -- We no longer specify that these type variables must be univerally 
201 -- quantified (lots of email on the subject).  If you want to put that 
202 -- back in, you need to
203 --      a) Do a checkSigTyVars after thing_inside
204 --      b) More insidiously, don't pass in expected_ty, else
205 --         we unify with it too early and checkSigTyVars barfs
206 --         Instead you have to pass in a fresh ty var, and unify
207 --         it with expected_ty afterwards
208 tcAddScopedTyVars [] thing_inside
209   = thing_inside        -- Quick get-out for the empty case
210
211 tcAddScopedTyVars sig_tys thing_inside
212   = tcGetEnv                                    `thenNF_Tc` \ env ->
213     let
214         all_sig_tvs     = foldr (unionNameSets . extractHsTyVars) emptyNameSet sig_tys
215         sig_tvs         = filter not_in_scope (nameSetToList all_sig_tvs)
216         not_in_scope tv = not (tcInLocalScope env tv)
217     in        
218     mapNF_Tc newNamedKindVar sig_tvs                    `thenTc` \ kind_env ->
219     tcExtendKindEnv kind_env (kcHsSigTypes sig_tys)     `thenTc_`
220     zonkKindEnv kind_env                                `thenNF_Tc` \ tvs_w_kinds ->
221     listTc [ tcNewMutTyVar name kind PatSigTv
222            | (name, kind) <- tvs_w_kinds]               `thenNF_Tc` \ tyvars ->
223     tcExtendTyVarEnv tyvars thing_inside
224 \end{code}
225     
226
227 \begin{code}
228 kcHsTyVar  :: HsTyVarBndr name   -> NF_TcM (name, TcKind)
229 kcHsTyVars :: [HsTyVarBndr name] -> NF_TcM [(name, TcKind)]
230
231 kcHsTyVar (UserTyVar name)       = newNamedKindVar name
232 kcHsTyVar (IfaceTyVar name kind) = returnNF_Tc (name, kind)
233
234 kcHsTyVars tvs = mapNF_Tc kcHsTyVar tvs
235
236 newNamedKindVar name = newKindVar       `thenNF_Tc` \ kind ->
237                        returnNF_Tc (name, kind)
238
239 ---------------------------
240 kcLiftedType :: RenamedHsType -> TcM ()
241         -- The type ty must be a *lifted* *type*
242 kcLiftedType ty
243   = kcHsType ty                         `thenTc` \ kind ->
244     tcAddErrCtxt (typeKindCtxt ty)      $
245     unifyKind liftedTypeKind kind
246     
247 ---------------------------
248 kcTypeType :: RenamedHsType -> TcM ()
249         -- The type ty must be a *type*, but it can be lifted or unlifted.
250 kcTypeType ty
251   = kcHsType ty                         `thenTc` \ kind ->
252     tcAddErrCtxt (typeKindCtxt ty)      $
253     unifyOpenTypeKind kind
254
255 ---------------------------
256 kcHsSigType, kcHsLiftedSigType :: RenamedHsType -> TcM ()
257         -- Used for type signatures
258 kcHsSigType       = kcTypeType
259 kcHsSigTypes tys  = mapTc_ kcHsSigType tys
260 kcHsLiftedSigType = kcLiftedType
261
262 ---------------------------
263 kcHsType :: RenamedHsType -> TcM TcKind
264 kcHsType (HsTyVar name)       = kcTyVar name
265
266 kcHsType (HsKindSig ty k)
267   = kcHsType ty                 `thenTc` \ k' ->
268     unifyKind k k'              `thenTc_`
269     returnTc k
270
271 kcHsType (HsListTy ty)
272   = kcLiftedType ty             `thenTc` \ tau_ty ->
273     returnTc liftedTypeKind
274
275 kcHsType (HsPArrTy ty)
276   = kcLiftedType ty             `thenTc` \ tau_ty ->
277     returnTc liftedTypeKind
278
279 kcHsType (HsTupleTy (HsTupCon _ boxity _) tys)
280   = mapTc kcTypeType tys        `thenTc_`
281     returnTc (case boxity of
282                   Boxed   -> liftedTypeKind
283                   Unboxed -> unliftedTypeKind)
284
285 kcHsType (HsFunTy ty1 ty2)
286   = kcTypeType ty1      `thenTc_`
287     kcTypeType ty2      `thenTc_`
288     returnTc liftedTypeKind
289
290 kcHsType (HsNumTy _)            -- The unit type for generics
291   = returnTc liftedTypeKind
292
293 kcHsType ty@(HsOpTy ty1 op ty2)
294   = kcTyVar op                          `thenTc` \ op_kind ->
295     kcHsType ty1                        `thenTc` \ ty1_kind ->
296     kcHsType ty2                        `thenTc` \ ty2_kind ->
297     tcAddErrCtxt (appKindCtxt (ppr ty)) $
298     kcAppKind op_kind  ty1_kind         `thenTc` \ op_kind' ->
299     kcAppKind op_kind' ty2_kind
300    
301 kcHsType (HsPredTy pred)
302   = kcHsPred pred               `thenTc_`
303     returnTc liftedTypeKind
304
305 kcHsType ty@(HsAppTy ty1 ty2)
306   = kcHsType ty1                        `thenTc` \ tc_kind ->
307     kcHsType ty2                        `thenTc` \ arg_kind ->
308     tcAddErrCtxt (appKindCtxt (ppr ty)) $
309     kcAppKind tc_kind arg_kind
310
311 kcHsType (HsForAllTy (Just tv_names) context ty)
312   = kcHsTyVars tv_names         `thenNF_Tc` \ kind_env ->
313     tcExtendKindEnv kind_env    $
314     kcHsContext context         `thenTc_`
315     kcHsType ty                 `thenTc_`
316     returnTc liftedTypeKind
317
318 ---------------------------
319 kcAppKind fun_kind arg_kind
320   = case tcSplitFunTy_maybe fun_kind of 
321         Just (arg_kind', res_kind)
322                 -> unifyKind arg_kind arg_kind' `thenTc_`
323                    returnTc res_kind
324
325         Nothing -> newKindVar                                           `thenNF_Tc` \ res_kind ->
326                    unifyKind fun_kind (mkArrowKind arg_kind res_kind)   `thenTc_`
327                    returnTc res_kind
328
329
330 ---------------------------
331 kc_pred :: RenamedHsPred -> TcM TcKind  -- Does *not* check for a saturated
332                                         -- application (reason: used from TcDeriv)
333 kc_pred pred@(HsIParam name ty)
334   = kcHsType ty
335
336 kc_pred pred@(HsClassP cls tys)
337   = kcClass cls                         `thenTc` \ kind ->
338     mapTc kcHsType tys                  `thenTc` \ arg_kinds ->
339     newKindVar                          `thenNF_Tc` \ kv -> 
340     unifyKind kind (mkArrowKinds arg_kinds kv)  `thenTc_` 
341     returnTc kv
342
343 ---------------------------
344 kcHsContext ctxt = mapTc_ kcHsPred ctxt
345
346 kcHsPred pred           -- Checks that the result is of kind liftedType
347   = tcAddErrCtxt (appKindCtxt (ppr pred))       $
348     kc_pred pred                                `thenTc` \ kind ->
349     unifyKind liftedTypeKind kind               `thenTc_`
350     returnTc ()
351     
352
353  ---------------------------
354 kcTyVar name    -- Could be a tyvar or a tycon
355   = tcLookup name       `thenTc` \ thing ->
356     case thing of 
357         AThing kind         -> returnTc kind
358         ATyVar tv           -> returnTc (tyVarKind tv)
359         AGlobal (ATyCon tc) -> returnTc (tyConKind tc) 
360         other               -> failWithTc (wrongThingErr "type" thing name)
361
362 kcClass cls     -- Must be a class
363   = tcLookup cls                                `thenNF_Tc` \ thing -> 
364     case thing of
365         AThing kind           -> returnTc kind
366         AGlobal (AClass cls)  -> returnTc (tyConKind (classTyCon cls))
367         other                 -> failWithTc (wrongThingErr "class" thing cls)
368 \end{code}
369
370 %************************************************************************
371 %*                                                                      *
372 \subsection{tc_type}
373 %*                                                                      *
374 %************************************************************************
375
376 tc_type, the main work horse
377 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
378
379         -------------------
380         *** BIG WARNING ***
381         -------------------
382
383 tc_type is used to typecheck the types in the RHS of data
384 constructors.  In the case of recursive data types, that means that
385 the type constructors themselves are (partly) black holes.  e.g.
386
387         data T a = MkT a [T a]
388
389 While typechecking the [T a] on the RHS, T itself is not yet fully
390 defined.  That in turn places restrictions on what you can check in
391 tcHsType; if you poke on too much you get a black hole.  I keep
392 forgetting this, hence this warning!
393
394 So tc_type does no validity-checking.  Instead that's all done
395 by TcMType.checkValidType
396
397         --------------------------
398         *** END OF BIG WARNING ***
399         --------------------------
400
401
402 \begin{code}
403 tc_type :: RenamedHsType -> TcM Type
404
405 tc_type ty@(HsTyVar name)
406   = tc_app ty []
407
408 tc_type (HsKindSig ty k)
409   = tc_type ty  -- Kind checking done already
410
411 tc_type (HsListTy ty)
412   = tc_type ty  `thenTc` \ tau_ty ->
413     returnTc (mkListTy tau_ty)
414
415 tc_type (HsPArrTy ty)
416   = tc_type ty  `thenTc` \ tau_ty ->
417     returnTc (mkPArrTy tau_ty)
418
419 tc_type (HsTupleTy (HsTupCon _ boxity arity) tys)
420   = ASSERT( tys `lengthIs` arity )
421     tc_types tys        `thenTc` \ tau_tys ->
422     returnTc (mkTupleTy boxity arity tau_tys)
423
424 tc_type (HsFunTy ty1 ty2)
425   = tc_type ty1                 `thenTc` \ tau_ty1 ->
426     tc_type ty2                 `thenTc` \ tau_ty2 ->
427     returnTc (mkFunTy tau_ty1 tau_ty2)
428
429 tc_type (HsNumTy n)
430   = ASSERT(n== 1)
431     returnTc (mkTyConApp genUnitTyCon [])
432
433 tc_type (HsOpTy ty1 op ty2)
434   = tc_type ty1 `thenTc` \ tau_ty1 ->
435     tc_type ty2 `thenTc` \ tau_ty2 ->
436     tc_fun_type op [tau_ty1,tau_ty2]
437
438 tc_type (HsAppTy ty1 ty2) = tc_app ty1 [ty2]
439
440 tc_type (HsPredTy pred)
441   = tc_pred pred        `thenTc` \ pred' ->
442     returnTc (mkPredTy pred')
443
444 tc_type full_ty@(HsForAllTy (Just tv_names) ctxt ty)
445   = let
446         kind_check = kcHsContext ctxt `thenTc_` kcHsType ty
447     in
448     tcHsTyVars tv_names kind_check      $ \ tyvars ->
449     mapTc tc_pred ctxt                  `thenTc` \ theta ->
450     tc_type ty                          `thenTc` \ tau ->
451     returnTc (mkSigmaTy tyvars theta tau)
452
453 tc_types arg_tys = mapTc tc_type arg_tys
454 \end{code}
455
456 Help functions for type applications
457 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
458
459 \begin{code}
460 tc_app :: RenamedHsType -> [RenamedHsType] -> TcM Type
461 tc_app (HsAppTy ty1 ty2) tys
462   = tc_app ty1 (ty2:tys)
463
464 tc_app ty tys
465   = tcAddErrCtxt (appKindCtxt pp_app)   $
466     tc_types tys                        `thenTc` \ arg_tys ->
467     case ty of
468         HsTyVar fun -> tc_fun_type fun arg_tys
469         other       -> tc_type ty               `thenTc` \ fun_ty ->
470                        returnNF_Tc (mkAppTys fun_ty arg_tys)
471   where
472     pp_app = ppr ty <+> sep (map pprParendHsType tys)
473
474 -- (tc_fun_type ty arg_tys) returns (mkAppTys ty arg_tys)
475 -- But not quite; for synonyms it checks the correct arity, and builds a SynTy
476 --      hence the rather strange functionality.
477
478 tc_fun_type name arg_tys
479   = tcLookup name                       `thenTc` \ thing ->
480     case thing of
481         ATyVar tv -> returnTc (mkAppTys (mkTyVarTy tv) arg_tys)
482
483         AGlobal (ATyCon tc)
484                 | isSynTyCon tc ->  returnTc (mkSynTy tc arg_tys)
485                 | otherwise     ->  returnTc (mkTyConApp tc arg_tys)
486
487         other -> failWithTc (wrongThingErr "type constructor" thing name)
488 \end{code}
489
490
491 Contexts
492 ~~~~~~~~
493 \begin{code}
494 tcHsPred pred = kc_pred pred `thenTc_`  tc_pred pred
495         -- Is happy with a partial application, e.g. (ST s)
496         -- Used from TcDeriv
497
498 tc_pred assn@(HsClassP class_name tys)
499   = tcAddErrCtxt (appKindCtxt (ppr assn))       $
500     tc_types tys                        `thenTc` \ arg_tys ->
501     tcLookupGlobal class_name                   `thenTc` \ thing ->
502     case thing of
503         AClass clas -> returnTc (ClassP clas arg_tys)
504         other       -> failWithTc (wrongThingErr "class" (AGlobal thing) class_name)
505
506 tc_pred assn@(HsIParam name ty)
507   = tcAddErrCtxt (appKindCtxt (ppr assn))       $
508     tc_type ty                                  `thenTc` \ arg_ty ->
509     returnTc (IParam name arg_ty)
510 \end{code}
511
512
513
514 %************************************************************************
515 %*                                                                      *
516 \subsection{Type variables, with knot tying!}
517 %*                                                                      *
518 %************************************************************************
519
520 \begin{code}
521 mkImmutTyVars :: [(Name,Kind)] -> [TyVar]
522 mkImmutTyVars pairs = [mkTyVar name kind | (name, kind) <- pairs]
523
524 mkTyClTyVars :: Kind                    -- Kind of the tycon or class
525              -> [HsTyVarBndr Name]
526              -> [TyVar]
527 mkTyClTyVars kind tyvar_names
528   = mkImmutTyVars tyvars_w_kinds
529   where
530     (tyvars_w_kinds, _) = zipFunTys (hsTyVarNames tyvar_names) kind
531 \end{code}
532
533
534 %************************************************************************
535 %*                                                                      *
536 \subsection{Signatures}
537 %*                                                                      *
538 %************************************************************************
539
540 @tcSigs@ checks the signatures for validity, and returns a list of
541 {\em freshly-instantiated} signatures.  That is, the types are already
542 split up, and have fresh type variables installed.  All non-type-signature
543 "RenamedSigs" are ignored.
544
545 The @TcSigInfo@ contains @TcTypes@ because they are unified with
546 the variable's type, and after that checked to see whether they've
547 been instantiated.
548
549 \begin{code}
550 data TcSigInfo
551   = TySigInfo       
552         Name                    -- N, the Name in corresponding binding
553
554         TcId                    -- *Polymorphic* binder for this value...
555                                 -- Has name = N
556
557         [TcTyVar]               -- tyvars
558         TcThetaType             -- theta
559         TcTauType               -- tau
560
561         TcId                    -- *Monomorphic* binder for this value
562                                 -- Does *not* have name = N
563                                 -- Has type tau
564
565         [Inst]                  -- Empty if theta is null, or
566                                 -- (method mono_id) otherwise
567
568         SrcLoc                  -- Of the signature
569
570 instance Outputable TcSigInfo where
571     ppr (TySigInfo nm id tyvars theta tau _ inst loc) =
572         ppr nm <+> ptext SLIT("::") <+> ppr tyvars <+> ppr theta <+> ptext SLIT("=>") <+> ppr tau
573
574 maybeSig :: [TcSigInfo] -> Name -> Maybe (TcSigInfo)
575         -- Search for a particular signature
576 maybeSig [] name = Nothing
577 maybeSig (sig@(TySigInfo sig_name _ _ _ _ _ _ _) : sigs) name
578   | name == sig_name = Just sig
579   | otherwise        = maybeSig sigs name
580 \end{code}
581
582
583 \begin{code}
584 tcTySig :: RenamedSig -> TcM TcSigInfo
585
586 tcTySig (Sig v ty src_loc)
587  = tcAddSrcLoc src_loc                          $ 
588    tcHsSigType (FunSigCtxt v) ty                `thenTc` \ sigma_tc_ty ->
589    mkTcSig (mkLocalId v sigma_tc_ty) src_loc    `thenNF_Tc` \ sig -> 
590    returnTc sig
591
592 mkTcSig :: TcId -> SrcLoc -> NF_TcM TcSigInfo
593 mkTcSig poly_id src_loc
594   =     -- Instantiate this type
595         -- It's important to do this even though in the error-free case
596         -- we could just split the sigma_tc_ty (since the tyvars don't
597         -- unified with anything).  But in the case of an error, when
598         -- the tyvars *do* get unified with something, we want to carry on
599         -- typechecking the rest of the program with the function bound
600         -- to a pristine type, namely sigma_tc_ty
601    tcInstSigType SigTv (idType poly_id)         `thenNF_Tc` \ (tyvars', theta', tau') ->
602
603    newMethodWithGivenTy SignatureOrigin 
604                         poly_id
605                         (mkTyVarTys tyvars')
606                         theta' tau'             `thenNF_Tc` \ inst ->
607         -- We make a Method even if it's not overloaded; no harm
608         
609    returnNF_Tc (TySigInfo (idName poly_id) poly_id tyvars' theta' tau' 
610                           (instToId inst) [inst] src_loc)
611 \end{code}
612
613
614
615 %************************************************************************
616 %*                                                                      *
617 \subsection{Errors and contexts}
618 %*                                                                      *
619 %************************************************************************
620
621 \begin{code}
622 typeKindCtxt :: RenamedHsType -> Message
623 typeKindCtxt ty = sep [ptext SLIT("When checking that"),
624                        nest 2 (quotes (ppr ty)),
625                        ptext SLIT("is a type")]
626
627 appKindCtxt :: SDoc -> Message
628 appKindCtxt pp = ptext SLIT("When checking kinds in") <+> quotes pp
629
630 wrongThingErr expected thing name
631   = pp_thing thing <+> quotes (ppr name) <+> ptext SLIT("used as a") <+> text expected
632   where
633     pp_thing (AGlobal (ATyCon _)) = ptext SLIT("Type constructor")
634     pp_thing (AGlobal (AClass _)) = ptext SLIT("Class")
635     pp_thing (AGlobal (AnId   _)) = ptext SLIT("Identifier")
636     pp_thing (ATyVar _)           = ptext SLIT("Type variable")
637     pp_thing (ATcId _)            = ptext SLIT("Local identifier")
638     pp_thing (AThing _)           = ptext SLIT("Utterly bogus")
639 \end{code}