a590e578c34bab6242772b9e73821a2b749ad139
[ghc-hetmet.git] / ghc / compiler / typecheck / TcBinds.lhs
1 %
2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1996
3 %
4 \section[TcBinds]{TcBinds}
5
6 \begin{code}
7 #include "HsVersions.h"
8
9 module TcBinds ( tcBindsAndThen, tcPragmaSigs, checkSigTyVars, tcBindWithSigs, TcSigInfo(..) ) where
10
11 IMP_Ubiq()
12
13 import HsSyn            ( HsBinds(..), Sig(..), MonoBinds(..), 
14                           Match, HsType, InPat(..), OutPat(..), HsExpr(..),
15                           SYN_IE(RecFlag), nonRecursive,
16                           GRHSsAndBinds, ArithSeqInfo, HsLit, Fake, Stmt, DoOrListComp, Fixity, 
17                           collectMonoBinders )
18 import RnHsSyn          ( SYN_IE(RenamedHsBinds), RenamedSig(..), 
19                           SYN_IE(RenamedMonoBinds)
20                         )
21 import TcHsSyn          ( SYN_IE(TcHsBinds), SYN_IE(TcMonoBinds),
22                           TcIdOcc(..), SYN_IE(TcIdBndr), SYN_IE(TcExpr), 
23                           tcIdType
24                         )
25
26 import TcMonad
27 import Inst             ( Inst, SYN_IE(LIE), emptyLIE, plusLIE, InstOrigin(..),
28                           newDicts, tyVarsOfInst, instToId
29                         )
30 import TcEnv            ( tcExtendLocalValEnv, tcLookupLocalValueOK, newMonoIds,
31                           tcGetGlobalTyVars, tcExtendGlobalTyVars
32                         )
33 import SpecEnv          ( SpecEnv )
34 IMPORT_DELOOPER(TcLoop)         ( tcGRHSsAndBinds )
35 import TcMatches        ( tcMatchesFun )
36 import TcSimplify       ( tcSimplify, tcSimplifyAndCheck )
37 import TcMonoType       ( tcHsType )
38 import TcPat            ( tcPat )
39 import TcSimplify       ( bindInstsOfLocalFuns )
40 import TcType           ( SYN_IE(TcType), SYN_IE(TcThetaType), SYN_IE(TcTauType), 
41                           SYN_IE(TcTyVarSet), SYN_IE(TcTyVar),
42                           newTyVarTy, zonkTcType, zonkTcTyVar, zonkTcTyVars,
43                           newTcTyVar, tcInstSigType, newTyVarTys
44                         )
45 import Unify            ( unifyTauTy, unifyTauTyLists )
46
47 import Kind             ( isUnboxedTypeKind, mkTypeKind, isTypeKind, mkBoxedTypeKind )
48 import Id               ( GenId, idType, mkUserLocal, mkUserId )
49 import IdInfo           ( noIdInfo )
50 import Maybes           ( maybeToBool, assocMaybe, catMaybes )
51 import Name             ( getOccName, getSrcLoc, Name )
52 import PragmaInfo       ( PragmaInfo(..) )
53 import Pretty
54 import Type             ( mkTyVarTy, mkTyVarTys, isTyVarTy, tyVarsOfTypes, eqSimpleTheta, 
55                           mkSigmaTy, splitSigmaTy, mkForAllTys, mkFunTys, getTyVar, mkDictTy,
56                           splitRhoTy, mkForAllTy, splitForAllTy )
57 import TyVar            ( GenTyVar, SYN_IE(TyVar), tyVarKind, minusTyVarSet, emptyTyVarSet,
58                           elementOfTyVarSet, unionTyVarSets, tyVarSetToList )
59 import Bag              ( bagToList, foldrBag, isEmptyBag )
60 import Util             ( isIn, zipEqual, zipWithEqual, zipWith3Equal, hasNoDups, assoc,
61                           assertPanic, panic, pprTrace )
62 import PprType          ( GenClass, GenType, GenTyVar )
63 import Unique           ( Unique )
64 import SrcLoc           ( SrcLoc )
65
66 import Outputable       --( interppSP, interpp'SP )
67 \end{code}
68
69
70 %************************************************************************
71 %*                                                                      *
72 \subsection{Type-checking bindings}
73 %*                                                                      *
74 %************************************************************************
75
76 @tcBindsAndThen@ typechecks a @HsBinds@.  The "and then" part is because
77 it needs to know something about the {\em usage} of the things bound,
78 so that it can create specialisations of them.  So @tcBindsAndThen@
79 takes a function which, given an extended environment, E, typechecks
80 the scope of the bindings returning a typechecked thing and (most
81 important) an LIE.  It is this LIE which is then used as the basis for
82 specialising the things bound.
83
84 @tcBindsAndThen@ also takes a "combiner" which glues together the
85 bindings and the "thing" to make a new "thing".
86
87 The real work is done by @tcBindWithSigsAndThen@.
88
89 Recursive and non-recursive binds are handled in essentially the same
90 way: because of uniques there are no scoping issues left.  The only
91 difference is that non-recursive bindings can bind primitive values.
92
93 Even for non-recursive binding groups we add typings for each binder
94 to the LVE for the following reason.  When each individual binding is
95 checked the type of its LHS is unified with that of its RHS; and
96 type-checking the LHS of course requires that the binder is in scope.
97
98 At the top-level the LIE is sure to contain nothing but constant
99 dictionaries, which we resolve at the module level.
100
101 \begin{code}
102 tcBindsAndThen
103         :: (TcHsBinds s -> thing -> thing)              -- Combinator
104         -> RenamedHsBinds
105         -> TcM s (thing, LIE s)
106         -> TcM s (thing, LIE s)
107
108 tcBindsAndThen combiner EmptyBinds do_next
109   = do_next     `thenTc` \ (thing, lie) ->
110     returnTc (combiner EmptyBinds thing, lie)
111
112 tcBindsAndThen combiner (ThenBinds binds1 binds2) do_next
113   = tcBindsAndThen combiner binds1 (tcBindsAndThen combiner binds2 do_next)
114
115 tcBindsAndThen combiner (MonoBind bind sigs is_rec) do_next
116   = fixTc (\ ~(prag_info_fn, _) ->
117         -- This is the usual prag_info fix; the PragmaInfo field of an Id
118         -- is not inspected till ages later in the compiler, so there
119         -- should be no black-hole problems here.
120
121         -- TYPECHECK THE SIGNATURES
122     mapTc (tcTySig prag_info_fn) ty_sigs                `thenTc` \ tc_ty_sigs ->
123
124     tcBindWithSigs binder_names bind 
125                    tc_ty_sigs is_rec prag_info_fn       `thenTc` \ (poly_binds, poly_lie, poly_ids) ->
126
127         -- Extend the environment to bind the new polymorphic Ids
128     tcExtendLocalValEnv binder_names poly_ids $
129
130         -- Build bindings and IdInfos corresponding to user pragmas
131     tcPragmaSigs sigs                   `thenTc` \ (prag_info_fn, prag_binds, prag_lie) ->
132
133         -- Now do whatever happens next, in the augmented envt
134     do_next                             `thenTc` \ (thing, thing_lie) ->
135
136         -- Create specialisations of functions bound here
137     bindInstsOfLocalFuns (prag_lie `plusLIE` thing_lie)
138                           poly_ids      `thenTc` \ (lie2, inst_mbinds) ->
139
140         -- All done
141     let
142         final_lie   = lie2 `plusLIE` poly_lie
143         final_binds = MonoBind poly_binds  [] is_rec            `ThenBinds`
144                       MonoBind inst_mbinds [] nonRecursive      `ThenBinds`
145                       prag_binds
146     in
147     returnTc (prag_info_fn, (combiner final_binds thing, final_lie))
148     )                                   `thenTc` \ (_, result) ->
149     returnTc result
150   where
151     binder_names = map fst (bagToList (collectMonoBinders bind))
152     ty_sigs      = [sig  | sig@(Sig name _ _) <- sigs]
153 \end{code}
154
155 An aside.  The original version of @tcBindsAndThen@ which lacks a
156 combiner function, appears below.  Though it is perfectly well
157 behaved, it cannot be typed by Haskell, because the recursive call is
158 at a different type to the definition itself.  There aren't too many
159 examples of this, which is why I thought it worth preserving! [SLPJ]
160
161 \begin{pseudocode}
162 tcBindsAndThen
163         :: RenamedHsBinds
164         -> TcM s (thing, LIE s, thing_ty))
165         -> TcM s ((TcHsBinds s, thing), LIE s, thing_ty)
166
167 tcBindsAndThen EmptyBinds do_next
168   = do_next             `thenTc` \ (thing, lie, thing_ty) ->
169     returnTc ((EmptyBinds, thing), lie, thing_ty)
170
171 tcBindsAndThen (ThenBinds binds1 binds2) do_next
172   = tcBindsAndThen binds1 (tcBindsAndThen binds2 do_next)
173         `thenTc` \ ((binds1', (binds2', thing')), lie1, thing_ty) ->
174
175     returnTc ((binds1' `ThenBinds` binds2', thing'), lie1, thing_ty)
176
177 tcBindsAndThen (MonoBind bind sigs is_rec) do_next
178   = tcBindAndThen bind sigs do_next
179 \end{pseudocode}
180
181
182 %************************************************************************
183 %*                                                                      *
184 \subsection{tcBindWithSigs}
185 %*                                                                      *
186 %************************************************************************
187
188 @tcBindWithSigs@ deals with a single binding group.  It does generalisation,
189 so all the clever stuff is in here.
190
191 * binder_names and mbind must define the same set of Names
192
193 * The Names in tc_ty_sigs must be a subset of binder_names
194
195 * The Ids in tc_ty_sigs don't necessarily have to have the same name
196   as the Name in the tc_ty_sig
197
198 \begin{code}
199 tcBindWithSigs  
200         :: [Name]
201         -> RenamedMonoBinds
202         -> [TcSigInfo s]
203         -> RecFlag
204         -> (Name -> PragmaInfo)
205         -> TcM s (TcMonoBinds s, LIE s, [TcIdBndr s])
206
207 tcBindWithSigs binder_names mbind tc_ty_sigs is_rec prag_info_fn
208   = recoverTc (
209         -- If typechecking the binds fails, then return with each
210         -- signature-less binder given type (forall a.a), to minimise subsequent
211         -- error messages
212         newTcTyVar mkBoxedTypeKind              `thenNF_Tc` \ alpha_tv ->
213         let
214           forall_a_a = mkForAllTy alpha_tv (mkTyVarTy alpha_tv)
215           poly_ids   = map mk_dummy binder_names
216           mk_dummy name = case maybeSig tc_ty_sigs name of
217                             Just (TySigInfo _ poly_id _ _ _ _) -> poly_id       -- Signature
218                             Nothing -> mkUserId name forall_a_a NoPragmaInfo    -- No signature
219         in
220         returnTc (EmptyMonoBinds, emptyLIE, poly_ids)
221     ) $
222
223         -- Create a new identifier for each binder, with each being given
224         -- a fresh unique, and a type-variable type.
225     tcGetUniques no_of_binders                  `thenNF_Tc` \ uniqs ->
226     mapNF_Tc mk_mono_id_ty binder_names         `thenNF_Tc` \ mono_id_tys ->
227     let
228         mono_id_tyvars     = tyVarsOfTypes mono_id_tys
229         mono_ids           = zipWith3Equal "tcBindAndSigs" mk_id binder_names uniqs mono_id_tys
230         mk_id name uniq ty = mkUserLocal (getOccName name) uniq ty (getSrcLoc name)
231     in
232
233         -- TYPECHECK THE BINDINGS
234     tcMonoBinds mbind binder_names mono_ids tc_ty_sigs  `thenTc` \ (mbind', lie) ->
235
236         -- CHECK THAT THE SIGNATURES MATCH
237         -- (must do this before getTyVarsToGen)
238     checkSigMatch tc_ty_sigs                            `thenTc` \ sig_theta ->
239         
240         -- COMPUTE VARIABLES OVER WHICH TO QUANTIFY, namely tyvars_to_gen
241         -- The tyvars_not_to_gen are free in the environment, and hence
242         -- candidates for generalisation, but sometimes the monomorphism
243         -- restriction means we can't generalise them nevertheless
244     getTyVarsToGen is_unrestricted mono_id_tyvars lie   `thenTc` \ (tyvars_not_to_gen, tyvars_to_gen) ->
245
246         -- DEAL WITH TYPE VARIABLE KINDS
247     mapTc defaultUncommittedTyVar (tyVarSetToList tyvars_to_gen)        `thenTc` \ tyvars_to_gen_list ->
248                 -- It's important that the final list (tyvars_to_gen_list) is fully
249                 -- zonked, *including boxity*, because they'll be included in the forall types of
250                 -- the polymorphic Ids, and instances of these Ids will be generated from them.
251                 --
252                 -- This step can do unification => keep other zonking after this
253
254         -- SIMPLIFY THE LIE
255     tcExtendGlobalTyVars tyvars_not_to_gen (
256         if null tc_ty_sigs then
257                 -- No signatures, so just simplify the lie
258             tcSimplify tyvars_to_gen lie                `thenTc` \ (lie_free, dict_binds, lie_bound) ->
259             returnTc (lie_free, dict_binds, map instToId (bagToList lie_bound))
260
261         else
262             zonk_theta sig_theta                        `thenNF_Tc` \ sig_theta' ->
263             newDicts SignatureOrigin sig_theta'         `thenNF_Tc` \ (dicts_sig, dict_ids) ->
264                 -- It's important that sig_theta is zonked, because
265                 -- dict_id is later used to form the type of the polymorphic thing,
266                 -- and forall-types must be zonked so far as their bound variables
267                 -- are concerned
268
269                 -- Check that the needed dicts can be expressed in
270                 -- terms of the signature ones
271             tcAddErrCtxt (sigsCtxt tysig_names) $
272             tcSimplifyAndCheck tyvars_to_gen dicts_sig lie      `thenTc` \ (lie_free, dict_binds) ->
273             returnTc (lie_free, dict_binds, dict_ids)
274
275     )                                           `thenTc` \ (lie_free, dict_binds, dicts_bound) ->
276
277     ASSERT( not (any (isUnboxedTypeKind . tyVarKind) tyvars_to_gen_list) )
278                 -- The instCantBeGeneralised stuff in tcSimplify should have
279                 -- already raised an error if we're trying to generalise an unboxed tyvar
280                 -- (NB: unboxed tyvars are always introduced along with a class constraint)
281                 -- and it's better done there because we have more precise origin information.
282                 -- That's why we just use an ASSERT here.
283
284          -- BUILD THE POLYMORPHIC RESULT IDs
285     mapNF_Tc zonkTcType mono_id_tys                     `thenNF_Tc` \ zonked_mono_id_types ->
286     let
287         exports  = zipWith3 mk_export binder_names mono_ids zonked_mono_id_types
288         dict_tys = map tcIdType dicts_bound
289
290         mk_export binder_name mono_id zonked_mono_id_ty
291           | maybeToBool maybe_sig = (sig_tyvars,         TcId sig_poly_id, TcId mono_id)
292           | otherwise             = (tyvars_to_gen_list, TcId poly_id,     TcId mono_id)
293           where
294             maybe_sig = maybeSig tc_ty_sigs binder_name
295             Just (TySigInfo _ sig_poly_id sig_tyvars _ _ _) = maybe_sig
296             poly_id = mkUserId binder_name poly_ty (prag_info_fn binder_name)
297             poly_ty = mkForAllTys tyvars_to_gen_list $ mkFunTys dict_tys $ zonked_mono_id_ty
298                                 -- It's important to build a fully-zonked poly_ty, because
299                                 -- we'll slurp out its free type variables when extending the
300                                 -- local environment (tcExtendLocalValEnv); if it's not zonked
301                                 -- it appears to have free tyvars that aren't actually free at all.
302     in
303
304          -- BUILD RESULTS
305     returnTc (
306          AbsBinds tyvars_to_gen_list
307                   dicts_bound
308                   exports
309                   (dict_binds `AndMonoBinds` mbind'),
310          lie_free,
311          [poly_id | (_, TcId poly_id, _) <- exports]
312     )
313   where
314     no_of_binders = length binder_names
315
316     mk_mono_id_ty binder_name = case maybeSig tc_ty_sigs binder_name of
317                                   Just (TySigInfo name _ _ _ tau_ty _) -> returnNF_Tc tau_ty -- There's a signature
318                                   otherwise                            -> newTyVarTy kind    -- No signature
319
320     tysig_names     = [name | (TySigInfo name _ _ _ _ _) <- tc_ty_sigs]
321     is_unrestricted = isUnRestrictedGroup tysig_names mbind
322
323     kind | is_rec    = mkBoxedTypeKind  -- Recursive, so no unboxed types
324          | otherwise = mkTypeKind               -- Non-recursive, so we permit unboxed types
325
326 zonk_theta theta = mapNF_Tc zonk theta
327         where
328           zonk (c,t) = zonkTcType t     `thenNF_Tc` \ t' ->
329                        returnNF_Tc (c,t')
330 \end{code}
331
332 @getImplicitStuffToGen@ decides what type variables generalise over.
333
334 For a "restricted group" -- see the monomorphism restriction
335 for a definition -- we bind no dictionaries, and
336 remove from tyvars_to_gen any constrained type variables
337
338 *Don't* simplify dicts at this point, because we aren't going
339 to generalise over these dicts.  By the time we do simplify them
340 we may well know more.  For example (this actually came up)
341         f :: Array Int Int
342         f x = array ... xs where xs = [1,2,3,4,5]
343 We don't want to generate lots of (fromInt Int 1), (fromInt Int 2)
344 stuff.  If we simplify only at the f-binding (not the xs-binding)
345 we'll know that the literals are all Ints, and we can just produce
346 Int literals!
347
348 Find all the type variables involved in overloading, the
349 "constrained_tyvars".  These are the ones we *aren't* going to
350 generalise.  We must be careful about doing this:
351
352  (a) If we fail to generalise a tyvar which is not actually
353         constrained, then it will never, ever get bound, and lands
354         up printed out in interface files!  Notorious example:
355                 instance Eq a => Eq (Foo a b) where ..
356         Here, b is not constrained, even though it looks as if it is.
357         Another, more common, example is when there's a Method inst in
358         the LIE, whose type might very well involve non-overloaded
359         type variables.
360
361  (b) On the other hand, we mustn't generalise tyvars which are constrained,
362         because we are going to pass on out the unmodified LIE, with those
363         tyvars in it.  They won't be in scope if we've generalised them.
364
365 So we are careful, and do a complete simplification just to find the
366 constrained tyvars. We don't use any of the results, except to
367 find which tyvars are constrained.
368
369 \begin{code}
370 getTyVarsToGen is_unrestricted mono_tyvars lie
371   = tcGetGlobalTyVars                           `thenNF_Tc` \ free_tyvars ->
372     zonkTcTyVars mono_tyvars                    `thenNF_Tc` \ mentioned_tyvars ->
373     let
374         tyvars_to_gen    = mentioned_tyvars `minusTyVarSet` free_tyvars
375     in
376     if is_unrestricted
377     then
378         returnTc (emptyTyVarSet, tyvars_to_gen)
379     else
380         tcSimplify tyvars_to_gen lie        `thenTc` \ (_, _, constrained_dicts) ->
381         let
382           -- ASSERT: dicts_sig is already zonked!
383             constrained_tyvars    = foldrBag (unionTyVarSets . tyVarsOfInst) emptyTyVarSet constrained_dicts
384             reduced_tyvars_to_gen = tyvars_to_gen `minusTyVarSet` constrained_tyvars
385         in
386         returnTc (constrained_tyvars, reduced_tyvars_to_gen)
387 \end{code}
388
389
390 \begin{code}
391 isUnRestrictedGroup :: [Name]           -- Signatures given for these
392                     -> RenamedMonoBinds
393                     -> Bool
394
395 is_elem v vs = isIn "isUnResMono" v vs
396
397 isUnRestrictedGroup sigs (PatMonoBind (VarPatIn v) _ _) = v `is_elem` sigs
398 isUnRestrictedGroup sigs (PatMonoBind other      _ _)   = False
399 isUnRestrictedGroup sigs (VarMonoBind v _)              = v `is_elem` sigs
400 isUnRestrictedGroup sigs (FunMonoBind _ _ _ _)          = True
401 isUnRestrictedGroup sigs (AndMonoBinds mb1 mb2)         = isUnRestrictedGroup sigs mb1 &&
402                                                           isUnRestrictedGroup sigs mb2
403 isUnRestrictedGroup sigs EmptyMonoBinds                 = True
404 \end{code}
405
406 @defaultUncommittedTyVar@ checks for generalisation over unboxed
407 types, and defaults any TypeKind TyVars to BoxedTypeKind.
408
409 \begin{code}
410 defaultUncommittedTyVar tyvar
411   | isTypeKind (tyVarKind tyvar)
412   = newTcTyVar mkBoxedTypeKind                                  `thenNF_Tc` \ boxed_tyvar ->
413     unifyTauTy (mkTyVarTy boxed_tyvar) (mkTyVarTy tyvar)        `thenTc_`
414     returnTc boxed_tyvar
415
416   | otherwise
417   = returnTc tyvar
418 \end{code}
419
420
421 %************************************************************************
422 %*                                                                      *
423 \subsection{tcMonoBind}
424 %*                                                                      *
425 %************************************************************************
426
427 @tcMonoBinds@ deals with a single @MonoBind@.  
428 The signatures have been dealt with already.
429
430 \begin{code}
431 tcMonoBinds :: RenamedMonoBinds 
432             -> [Name] -> [TcIdBndr s]
433             -> [TcSigInfo s]
434             -> TcM s (TcMonoBinds s, LIE s)
435
436 tcMonoBinds mbind binder_names mono_ids tc_ty_sigs
437   = tcExtendLocalValEnv binder_names mono_ids (
438         tc_mono_binds mbind
439     )
440   where
441     sig_names = [name | (TySigInfo name _ _ _ _ _) <- tc_ty_sigs]
442     sig_ids   = [id   | (TySigInfo _   id _ _ _ _) <- tc_ty_sigs]
443
444     tc_mono_binds EmptyMonoBinds = returnTc (EmptyMonoBinds, emptyLIE)
445
446     tc_mono_binds (AndMonoBinds mb1 mb2)
447       = tc_mono_binds mb1               `thenTc` \ (mb1a, lie1) ->
448         tc_mono_binds mb2               `thenTc` \ (mb2a, lie2) ->
449         returnTc (AndMonoBinds mb1a mb2a, lie1 `plusLIE` lie2)
450
451     tc_mono_binds (FunMonoBind name inf matches locn)
452       = tcAddSrcLoc locn                                $
453         tcLookupLocalValueOK "tc_mono_binds" name       `thenNF_Tc` \ id ->
454
455                 -- Before checking the RHS, extend the envt with
456                 -- bindings for the *polymorphic* Ids from any type signatures
457         tcExtendLocalValEnv sig_names sig_ids           $
458         tcMatchesFun name (idType id) matches           `thenTc` \ (matches', lie) ->
459
460         returnTc (FunMonoBind (TcId id) inf matches' locn, lie)
461
462     tc_mono_binds bind@(PatMonoBind pat grhss_and_binds locn)
463       = tcAddSrcLoc locn                        $
464         tcPat pat                               `thenTc` \ (pat2, lie_pat, pat_ty) ->
465         tcExtendLocalValEnv sig_names sig_ids   $
466         tcGRHSsAndBinds grhss_and_binds         `thenTc` \ (grhss_and_binds2, lie, grhss_ty) ->
467         tcAddErrCtxt (patMonoBindsCtxt bind)    $
468         unifyTauTy pat_ty grhss_ty              `thenTc_`
469         returnTc (PatMonoBind pat2 grhss_and_binds2 locn,
470                   plusLIE lie_pat lie)
471 \end{code}
472
473 %************************************************************************
474 %*                                                                      *
475 \subsection{Signatures}
476 %*                                                                      *
477 %************************************************************************
478
479 @tcSigs@ checks the signatures for validity, and returns a list of
480 {\em freshly-instantiated} signatures.  That is, the types are already
481 split up, and have fresh type variables installed.  All non-type-signature
482 "RenamedSigs" are ignored.
483
484 The @TcSigInfo@ contains @TcTypes@ because they are unified with
485 the variable's type, and after that checked to see whether they've
486 been instantiated.
487
488 \begin{code}
489 data TcSigInfo s
490   = TySigInfo       Name
491                     (TcIdBndr s)        -- *Polymorphic* binder for this value...
492                     [TcTyVar s] (TcThetaType s) (TcTauType s)
493                     SrcLoc
494
495
496 maybeSig :: [TcSigInfo s] -> Name -> Maybe (TcSigInfo s)
497         -- Search for a particular signature
498 maybeSig [] name = Nothing
499 maybeSig (sig@(TySigInfo sig_name _ _ _ _ _) : sigs) name
500   | name == sig_name = Just sig
501   | otherwise        = maybeSig sigs name
502 \end{code}
503
504
505 \begin{code}
506 tcTySig :: (Name -> PragmaInfo)
507         -> RenamedSig
508         -> TcM s (TcSigInfo s)
509
510 tcTySig prag_info_fn (Sig v ty src_loc)
511  = tcAddSrcLoc src_loc $
512    tcHsType ty                  `thenTc` \ sigma_ty ->
513    tcInstSigType sigma_ty       `thenNF_Tc` \ sigma_ty' ->
514    let
515      poly_id = mkUserId v sigma_ty' (prag_info_fn v)
516      (tyvars', theta', tau') = splitSigmaTy sigma_ty'
517         -- This splitSigmaTy tries hard to make sure that tau' is a type synonym
518         -- wherever possible, which can improve interface files.
519    in
520    returnTc (TySigInfo v poly_id tyvars' theta' tau' src_loc)
521 \end{code}
522
523 @checkSigMatch@ does the next step in checking signature matching.
524 The tau-type part has already been unified.  What we do here is to
525 check that this unification has not over-constrained the (polymorphic)
526 type variables of the original signature type.
527
528 The error message here is somewhat unsatisfactory, but it'll do for
529 now (ToDo).
530
531 \begin{code}
532 checkSigMatch []
533   = returnTc (error "checkSigMatch")
534
535 checkSigMatch tc_ty_sigs
536   =     -- CHECK THAT ALL THE SIGNATURE CONTEXTS ARE UNIFIABLE
537         -- The type signatures on a mutually-recursive group of definitions
538         -- must all have the same context (or none).
539         --
540         -- We unify them because, with polymorphic recursion, their types
541         -- might not otherwise be related.  This is a rather subtle issue.
542         -- ToDo: amplify
543     tcAddErrCtxt (sigContextsCtxt tc_ty_sigs) (
544         mapTc (unifyTauTyLists dict_tys1) dict_tys_s
545     )                                           `thenTc_`
546     
547         -- CHECK THAT THE SIGNATURE TYVARS AND TAU_TYPES ARE OK
548         -- Doesn't affect substitution
549     mapTc check_one_sig tc_ty_sigs      `thenTc_`
550
551     returnTc theta1
552   where
553     (theta1:thetas)          = [theta | TySigInfo _ _ _ theta _ _ <- tc_ty_sigs]
554     (dict_tys1 : dict_tys_s) = map mk_dict_tys (theta1 : thetas)
555     mk_dict_tys theta        = [mkDictTy c t | (c,t) <- theta]
556
557     check_one_sig (TySigInfo name id sig_tyvars _ sig_tau src_loc)
558       = tcAddSrcLoc src_loc     $
559         tcAddErrCtxt (sigCtxt id) $
560         checkSigTyVars sig_tyvars sig_tau
561 \end{code}
562
563
564 @checkSigTyVars@ is used after the type in a type signature has been unified with
565 the actual type found.  It then checks that the type variables of the type signature
566 are
567         (a) still all type variables
568                 eg matching signature [a] against inferred type [(p,q)]
569                 [then a will be unified to a non-type variable]
570
571         (b) still all distinct
572                 eg matching signature [(a,b)] against inferred type [(p,p)]
573                 [then a and b will be unified together]
574
575 BUT ACTUALLY THESE FIRST TWO ARE FORCED BY USING DontBind TYVARS
576
577         (c) not mentioned in the environment
578                 eg the signature for f in this:
579
580                         g x = ... where
581                                         f :: a->[a]
582                                         f y = [x,y]
583
584                 Here, f is forced to be monorphic by the free occurence of x.
585
586 Before doing this, the substitution is applied to the signature type variable.
587
588 \begin{code}
589 checkSigTyVars :: [TcTyVar s]           -- The original signature type variables
590                -> TcType s              -- signature type (for err msg)
591                -> TcM s ()
592
593 checkSigTyVars sig_tyvars sig_tau
594   = tcGetGlobalTyVars                   `thenNF_Tc` \ globals ->
595     let
596         mono_tyvars = filter (`elementOfTyVarSet` globals) sig_tyvars
597     in
598         -- TEMPORARY FIX
599         -- Until the final Bind-handling stuff is in, several type signatures in the same
600         -- bindings group can cause the signature type variable from the different
601         -- signatures to be unified.  So we still need to zonk and check point (b).
602         -- Remove when activating the new binding code
603     mapNF_Tc zonkTcTyVar sig_tyvars     `thenNF_Tc` \ sig_tys ->
604     checkTcM (hasNoDups (map (getTyVar "checkSigTyVars") sig_tys))
605              (zonkTcType sig_tau        `thenNF_Tc` \ sig_tau' ->
606               failTc (badMatchErr sig_tau sig_tau')
607              )                          `thenTc_`
608
609
610         -- Check point (c)
611         -- We want to report errors in terms of the original signature tyvars,
612         -- ie sig_tyvars, NOT sig_tyvars'.  sig_tys and sig_tyvars' correspond
613         -- 1-1 with sig_tyvars, so we can just map back.
614     checkTc (null mono_tyvars)
615             (notAsPolyAsSigErr sig_tau mono_tyvars)
616 \end{code}
617
618
619 %************************************************************************
620 %*                                                                      *
621 \subsection{SPECIALIZE pragmas}
622 %*                                                                      *
623 %************************************************************************
624
625
626 @tcPragmaSigs@ munches up the "signatures" that arise through *user*
627 pragmas.  It is convenient for them to appear in the @[RenamedSig]@
628 part of a binding because then the same machinery can be used for
629 moving them into place as is done for type signatures.
630
631 \begin{code}
632 tcPragmaSigs :: [RenamedSig]                    -- The pragma signatures
633              -> TcM s (Name -> PragmaInfo,      -- Maps name to the appropriate PragmaInfo
634                        TcHsBinds s,
635                        LIE s)
636
637 tcPragmaSigs sigs = returnTc ( \name -> NoPragmaInfo, EmptyBinds, emptyLIE )
638
639 {- 
640 tcPragmaSigs sigs
641   = mapAndUnzip3Tc tcPragmaSig sigs     `thenTc` \ (names_w_id_infos, binds, lies) ->
642     let
643         name_to_info name = foldr ($) noIdInfo
644                                   [info_fn | (n,info_fn) <- names_w_id_infos, n==name]
645     in
646     returnTc (name_to_info,
647               foldr ThenBinds EmptyBinds binds,
648               foldr plusLIE emptyLIE lies)
649 \end{code}
650
651 Here are the easy cases for tcPragmaSigs
652
653 \begin{code}
654 tcPragmaSig (DeforestSig name loc)
655   = returnTc ((name, addDeforestInfo DoDeforest),EmptyBinds,emptyLIE)
656 tcPragmaSig (InlineSig name loc)
657   = returnTc ((name, addUnfoldInfo (iWantToBeINLINEd UnfoldAlways)), EmptyBinds, emptyLIE)
658 tcPragmaSig (MagicUnfoldingSig name string loc)
659   = returnTc ((name, addUnfoldInfo (mkMagicUnfolding string)), EmptyBinds, emptyLIE)
660 \end{code}
661
662 The interesting case is for SPECIALISE pragmas.  There are two forms.
663 Here's the first form:
664 \begin{verbatim}
665         f :: Ord a => [a] -> b -> b
666         {-# SPECIALIZE f :: [Int] -> b -> b #-}
667 \end{verbatim}
668
669 For this we generate:
670 \begin{verbatim}
671         f* = /\ b -> let d1 = ...
672                      in f Int b d1
673 \end{verbatim}
674
675 where f* is a SpecPragmaId.  The **sole** purpose of SpecPragmaIds is to
676 retain a right-hand-side that the simplifier will otherwise discard as
677 dead code... the simplifier has a flag that tells it not to discard
678 SpecPragmaId bindings.
679
680 In this case the f* retains a call-instance of the overloaded
681 function, f, (including appropriate dictionaries) so that the
682 specialiser will subsequently discover that there's a call of @f@ at
683 Int, and will create a specialisation for @f@.  After that, the
684 binding for @f*@ can be discarded.
685
686 The second form is this:
687 \begin{verbatim}
688         f :: Ord a => [a] -> b -> b
689         {-# SPECIALIZE f :: [Int] -> b -> b = g #-}
690 \end{verbatim}
691
692 Here @g@ is specified as a function that implements the specialised
693 version of @f@.  Suppose that g has type (a->b->b); that is, g's type
694 is more general than that required.  For this we generate
695 \begin{verbatim}
696         f@Int = /\b -> g Int b
697         f* = f@Int
698 \end{verbatim}
699
700 Here @f@@Int@ is a SpecId, the specialised version of @f@.  It inherits
701 f's export status etc.  @f*@ is a SpecPragmaId, as before, which just serves
702 to prevent @f@@Int@ from being discarded prematurely.  After specialisation,
703 if @f@@Int@ is going to be used at all it will be used explicitly, so the simplifier can
704 discard the f* binding.
705
706 Actually, there is really only point in giving a SPECIALISE pragma on exported things,
707 and the simplifer won't discard SpecIds for exporte things anyway, so maybe this is
708 a bit of overkill.
709
710 \begin{code}
711 tcPragmaSig (SpecSig name poly_ty maybe_spec_name src_loc)
712   = tcAddSrcLoc src_loc                         $
713     tcAddErrCtxt (valSpecSigCtxt name spec_ty)  $
714
715         -- Get and instantiate its alleged specialised type
716     tcHsType poly_ty                            `thenTc` \ sig_sigma ->
717     tcInstSigType  sig_sigma                    `thenNF_Tc` \ sig_ty ->
718     let
719         (sig_tyvars, sig_theta, sig_tau) = splitSigmaTy sig_ty
720         origin = ValSpecOrigin name
721     in
722
723         -- Check that the SPECIALIZE pragma had an empty context
724     checkTc (null sig_theta)
725             (panic "SPECIALIZE non-empty context (ToDo: msg)") `thenTc_`
726
727         -- Get and instantiate the type of the id mentioned
728     tcLookupLocalValueOK "tcPragmaSig" name     `thenNF_Tc` \ main_id ->
729     tcInstSigType [] (idType main_id)           `thenNF_Tc` \ main_ty ->
730     let
731         (main_tyvars, main_rho) = splitForAllTy main_ty
732         (main_theta,main_tau)   = splitRhoTy main_rho
733         main_arg_tys            = mkTyVarTys main_tyvars
734     in
735
736         -- Check that the specialised type is indeed an instance of
737         -- the type of the main function.
738     unifyTauTy sig_tau main_tau         `thenTc_`
739     checkSigTyVars sig_tyvars sig_tau   `thenTc_`
740
741         -- Check that the type variables of the polymorphic function are
742         -- either left polymorphic, or instantiate to ground type.
743         -- Also check that the overloaded type variables are instantiated to
744         -- ground type; or equivalently that all dictionaries have ground type
745     mapTc zonkTcType main_arg_tys       `thenNF_Tc` \ main_arg_tys' ->
746     zonkTcThetaType main_theta          `thenNF_Tc` \ main_theta' ->
747     tcAddErrCtxt (specGroundnessCtxt main_arg_tys')
748               (checkTc (all isGroundOrTyVarTy main_arg_tys'))           `thenTc_`
749     tcAddErrCtxt (specContextGroundnessCtxt main_theta')
750               (checkTc (and [isGroundTy ty | (_,ty) <- theta']))        `thenTc_`
751
752         -- Build the SpecPragmaId; it is the thing that makes sure we
753         -- don't prematurely dead-code-eliminate the binding we are really interested in.
754     newSpecPragmaId name sig_ty         `thenNF_Tc` \ spec_pragma_id ->
755
756         -- Build a suitable binding; depending on whether we were given
757         -- a value (Maybe Name) to be used as the specialisation.
758     case using of
759       Nothing ->                -- No implementation function specified
760
761                 -- Make a Method inst for the occurrence of the overloaded function
762         newMethodWithGivenTy (OccurrenceOf name)
763                   (TcId main_id) main_arg_tys main_rho  `thenNF_Tc` \ (lie, meth_id) ->
764
765         let
766             pseudo_bind = VarMonoBind spec_pragma_id pseudo_rhs
767             pseudo_rhs  = mkHsTyLam sig_tyvars (HsVar (TcId meth_id))
768         in
769         returnTc (pseudo_bind, lie, \ info -> info)
770
771       Just spec_name ->         -- Use spec_name as the specialisation value ...
772
773                 -- Type check a simple occurrence of the specialised Id
774         tcId spec_name          `thenTc` \ (spec_body, spec_lie, spec_tau) ->
775
776                 -- Check that it has the correct type, and doesn't constrain the
777                 -- signature variables at all
778         unifyTauTy sig_tau spec_tau             `thenTc_`
779         checkSigTyVars sig_tyvars sig_tau       `thenTc_`
780
781             -- Make a local SpecId to bind to applied spec_id
782         newSpecId main_id main_arg_tys sig_ty   `thenNF_Tc` \ local_spec_id ->
783
784         let
785             spec_rhs   = mkHsTyLam sig_tyvars spec_body
786             spec_binds = VarMonoBind local_spec_id spec_rhs
787                            `AndMonoBinds`
788                          VarMonoBind spec_pragma_id (HsVar (TcId local_spec_id))
789             spec_info  = SpecInfo spec_tys (length main_theta) local_spec_id
790         in
791         returnTc ((name, addSpecInfo spec_info), spec_binds, spec_lie)
792 -}
793 \end{code}
794
795
796 %************************************************************************
797 %*                                                                      *
798 \subsection[TcBinds-errors]{Error contexts and messages}
799 %*                                                                      *
800 %************************************************************************
801
802
803 \begin{code}
804 patMonoBindsCtxt bind sty
805   = hang (ptext SLIT("In a pattern binding:")) 4 (ppr sty bind)
806
807 -----------------------------------------------
808 valSpecSigCtxt v ty sty
809   = hang (ptext SLIT("In a SPECIALIZE pragma for a value:"))
810          4 (sep [(<>) (ppr sty v) (ptext SLIT(" ::")),
811                   ppr sty ty])
812
813
814
815 -----------------------------------------------
816 notAsPolyAsSigErr sig_tau mono_tyvars sty
817   = hang (ptext SLIT("A type signature is more polymorphic than the inferred type"))
818         4  (vcat [text "Some type variables in the inferred type can't be forall'd, namely:",
819                       interpp'SP sty mono_tyvars,
820                       ptext SLIT("Possible cause: the RHS mentions something subject to the monomorphism restriction")
821                      ])
822
823 -----------------------------------------------
824 badMatchErr sig_ty inferred_ty sty
825   = hang (ptext SLIT("Type signature doesn't match inferred type"))
826          4 (vcat [hang (ptext SLIT("Signature:")) 4 (ppr sty sig_ty),
827                       hang (ptext SLIT("Inferred :")) 4 (ppr sty inferred_ty)
828            ])
829
830 -----------------------------------------------
831 sigCtxt id sty 
832   = sep [ptext SLIT("When checking signature for"), ppr sty id]
833 sigsCtxt ids sty 
834   = sep [ptext SLIT("When checking signature(s) for:"), interpp'SP sty ids]
835
836 -----------------------------------------------
837 sigContextsCtxt ty_sigs sty
838   = hang (ptext SLIT("When matching the contexts of the signatures of a recursive group"))
839          4 (vcat (map ppr_tc_ty_sig ty_sigs))
840   where
841     ppr_tc_ty_sig (TySigInfo val _ tyvars theta tau_ty _)
842       = hang ((<>) (ppr sty val) (ptext SLIT(" :: ")))
843              4 (if null theta
844                 then empty
845                 else hcat [parens (hsep (punctuate comma (map (ppr_inst sty) theta))), 
846                            text " => ..."])
847     ppr_inst sty (clas, ty) = hsep [ppr sty clas, ppr sty ty]
848
849 -----------------------------------------------
850 specGroundnessCtxt
851   = panic "specGroundnessCtxt"
852
853 --------------------------------------------
854 specContextGroundnessCtxt -- err_ctxt dicts sty
855   = panic "specContextGroundnessCtxt"
856 {-
857   = hang (
858         sep [hsep [ptext SLIT("In the SPECIALIZE pragma for"), ppr sty name],
859              hcat [ptext SLIT(" specialised to the type"), ppr sty spec_ty],
860              pp_spec_id sty,
861              ptext SLIT("... not all overloaded type variables were instantiated"),
862              ptext SLIT("to ground types:")])
863       4 (vcat [hsep [ppr sty c, ppr sty t]
864                   | (c,t) <- map getDictClassAndType dicts])
865   where
866     (name, spec_ty, locn, pp_spec_id)
867       = case err_ctxt of
868           ValSpecSigCtxt    n ty loc      -> (n, ty, loc, \ x -> empty)
869           ValSpecSpecIdCtxt n ty spec loc ->
870             (n, ty, loc,
871              \ sty -> hsep [ptext SLIT("... type of explicit id"), ppr sty spec])
872 -}
873 \end{code}
874
875
876
877