[project @ 2000-06-10 00:34:52 by lewie]
[ghc-hetmet.git] / ghc / compiler / typecheck / TcBinds.lhs
1 %
2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
3 %
4 \section[TcBinds]{TcBinds}
5
6 \begin{code}
7 module TcBinds ( tcBindsAndThen, tcTopBindsAndThen,
8                  tcSpecSigs, tcBindWithSigs ) where
9
10 #include "HsVersions.h"
11
12 import {-# SOURCE #-} TcMatches ( tcGRHSs, tcMatchesFun )
13 import {-# SOURCE #-} TcExpr  ( tcExpr )
14
15 import HsSyn            ( HsExpr(..), HsBinds(..), MonoBinds(..), Sig(..), InPat(..), StmtCtxt(..),
16                           Match(..), collectMonoBinders, andMonoBindList, andMonoBinds
17                         )
18 import RnHsSyn          ( RenamedHsBinds, RenamedSig, RenamedMonoBinds )
19 import TcHsSyn          ( TcHsBinds, TcMonoBinds, TcId, zonkId, mkHsLet )
20
21 import TcMonad
22 import Inst             ( Inst, LIE, emptyLIE, mkLIE, plusLIE, plusLIEs, InstOrigin(..),
23                           newDicts, tyVarsOfInst, instToId,
24                           getAllFunDepsOfLIE, getIPsOfLIE, zonkFunDeps
25                         )
26 import TcEnv            ( tcExtendLocalValEnv,
27                           newSpecPragmaId, newLocalId,
28                           tcLookupTyConByKey, 
29                           tcGetGlobalTyVars, tcExtendGlobalTyVars
30                         )
31 import TcSimplify       ( tcSimplify, tcSimplifyAndCheck, tcSimplifyToDicts )
32 import TcImprove        ( tcImprove )
33 import TcMonoType       ( tcHsSigType, checkSigTyVars,
34                           TcSigInfo(..), tcTySig, maybeSig, sigCtxt
35                         )
36 import TcPat            ( tcPat )
37 import TcSimplify       ( bindInstsOfLocalFuns )
38 import TcType           ( TcType, TcThetaType,
39                           TcTyVar,
40                           newTyVarTy, newTyVar, newTyVarTy_OpenKind, tcInstTcType,
41                           zonkTcType, zonkTcTypes, zonkTcThetaType, zonkTcTyVarToTyVar
42                         )
43 import TcUnify          ( unifyTauTy, unifyTauTyLists )
44
45 import Id               ( Id, mkVanillaId, setInlinePragma, idFreeTyVars )
46 import Var              ( idType, idName )
47 import IdInfo           ( setInlinePragInfo, InlinePragInfo(..) )
48 import Name             ( Name, getName, getOccName, getSrcLoc )
49 import NameSet
50 import Type             ( mkTyVarTy, tyVarsOfTypes, mkTyConApp,
51                           splitSigmaTy, mkForAllTys, mkFunTys, getTyVar, 
52                           mkPredTy, splitRhoTy, mkForAllTy, isUnLiftedType, 
53                           isUnboxedType, unboxedTypeKind, boxedTypeKind
54                         )
55 import FunDeps          ( tyVarFunDep, oclose )
56 import Var              ( TyVar, tyVarKind )
57 import VarSet
58 import Bag
59 import Util             ( isIn )
60 import Maybes           ( maybeToBool )
61 import BasicTypes       ( TopLevelFlag(..), RecFlag(..), isNotTopLevel )
62 import FiniteMap        ( listToFM, lookupFM )
63 import Unique           ( ioTyConKey, mainKey, hasKey, Uniquable(..) )
64 import SrcLoc           ( SrcLoc )
65 import Outputable
66 \end{code}
67
68
69 %************************************************************************
70 %*                                                                      *
71 \subsection{Type-checking bindings}
72 %*                                                                      *
73 %************************************************************************
74
75 @tcBindsAndThen@ typechecks a @HsBinds@.  The "and then" part is because
76 it needs to know something about the {\em usage} of the things bound,
77 so that it can create specialisations of them.  So @tcBindsAndThen@
78 takes a function which, given an extended environment, E, typechecks
79 the scope of the bindings returning a typechecked thing and (most
80 important) an LIE.  It is this LIE which is then used as the basis for
81 specialising the things bound.
82
83 @tcBindsAndThen@ also takes a "combiner" which glues together the
84 bindings and the "thing" to make a new "thing".
85
86 The real work is done by @tcBindWithSigsAndThen@.
87
88 Recursive and non-recursive binds are handled in essentially the same
89 way: because of uniques there are no scoping issues left.  The only
90 difference is that non-recursive bindings can bind primitive values.
91
92 Even for non-recursive binding groups we add typings for each binder
93 to the LVE for the following reason.  When each individual binding is
94 checked the type of its LHS is unified with that of its RHS; and
95 type-checking the LHS of course requires that the binder is in scope.
96
97 At the top-level the LIE is sure to contain nothing but constant
98 dictionaries, which we resolve at the module level.
99
100 \begin{code}
101 tcTopBindsAndThen, tcBindsAndThen
102         :: (RecFlag -> TcMonoBinds -> thing -> thing)           -- Combinator
103         -> RenamedHsBinds
104         -> TcM s (thing, LIE)
105         -> TcM s (thing, LIE)
106
107 tcTopBindsAndThen = tc_binds_and_then TopLevel
108 tcBindsAndThen    = tc_binds_and_then NotTopLevel
109
110 tc_binds_and_then top_lvl combiner EmptyBinds do_next
111   = do_next
112 tc_binds_and_then top_lvl combiner (MonoBind EmptyMonoBinds sigs is_rec) do_next
113   = do_next
114
115 tc_binds_and_then top_lvl combiner (ThenBinds b1 b2) do_next
116   = tc_binds_and_then top_lvl combiner b1       $
117     tc_binds_and_then top_lvl combiner b2       $
118     do_next
119
120 tc_binds_and_then top_lvl combiner (MonoBind bind sigs is_rec) do_next
121   =     -- TYPECHECK THE SIGNATURES
122       mapTc tcTySig [sig | sig@(Sig name _ _) <- sigs]  `thenTc` \ tc_ty_sigs ->
123   
124       tcBindWithSigs top_lvl bind tc_ty_sigs
125                      sigs is_rec                        `thenTc` \ (poly_binds, poly_lie, poly_ids) ->
126   
127           -- Extend the environment to bind the new polymorphic Ids
128       tcExtendLocalValEnv [(idName poly_id, poly_id) | poly_id <- poly_ids] $
129   
130           -- Build bindings and IdInfos corresponding to user pragmas
131       tcSpecSigs sigs           `thenTc` \ (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         -- We want to keep non-recursive things non-recursive
138         -- so that we desugar unboxed bindings correctly
139       case (top_lvl, is_rec) of
140
141                 -- For the top level don't bother will all this bindInstsOfLocalFuns stuff
142                 -- All the top level things are rec'd together anyway, so it's fine to
143                 -- leave them to the tcSimplifyTop, and quite a bit faster too
144         (TopLevel, _)
145                 -> returnTc (combiner Recursive (poly_binds `andMonoBinds` prag_binds) thing,
146                              thing_lie `plusLIE` prag_lie `plusLIE` poly_lie)
147
148         (NotTopLevel, NonRecursive) 
149                 -> bindInstsOfLocalFuns 
150                                 (thing_lie `plusLIE` prag_lie)
151                                 poly_ids                        `thenTc` \ (thing_lie', lie_binds) ->
152
153                    returnTc (
154                         combiner NonRecursive poly_binds $
155                         combiner NonRecursive prag_binds $
156                         combiner Recursive lie_binds  $
157                                 -- NB: the binds returned by tcSimplify and bindInstsOfLocalFuns
158                                 -- aren't guaranteed in dependency order (though we could change
159                                 -- that); hence the Recursive marker.
160                         thing,
161
162                         thing_lie' `plusLIE` poly_lie
163                    )
164
165         (NotTopLevel, Recursive)
166                 -> bindInstsOfLocalFuns 
167                                 (thing_lie `plusLIE` poly_lie `plusLIE` prag_lie) 
168                                 poly_ids                        `thenTc` \ (final_lie, lie_binds) ->
169
170                    returnTc (
171                         combiner Recursive (
172                                 poly_binds `andMonoBinds`
173                                 lie_binds  `andMonoBinds`
174                                 prag_binds) thing,
175                         final_lie
176                    )
177 \end{code}
178
179 An aside.  The original version of @tcBindsAndThen@ which lacks a
180 combiner function, appears below.  Though it is perfectly well
181 behaved, it cannot be typed by Haskell, because the recursive call is
182 at a different type to the definition itself.  There aren't too many
183 examples of this, which is why I thought it worth preserving! [SLPJ]
184
185 \begin{pseudocode}
186 % tcBindsAndThen
187 %       :: RenamedHsBinds
188 %       -> TcM s (thing, LIE, thing_ty))
189 %       -> TcM s ((TcHsBinds, thing), LIE, thing_ty)
190
191 % tcBindsAndThen EmptyBinds do_next
192 %   = do_next           `thenTc` \ (thing, lie, thing_ty) ->
193 %     returnTc ((EmptyBinds, thing), lie, thing_ty)
194
195 % tcBindsAndThen (ThenBinds binds1 binds2) do_next
196 %   = tcBindsAndThen binds1 (tcBindsAndThen binds2 do_next)
197 %       `thenTc` \ ((binds1', (binds2', thing')), lie1, thing_ty) ->
198
199 %     returnTc ((binds1' `ThenBinds` binds2', thing'), lie1, thing_ty)
200
201 % tcBindsAndThen (MonoBind bind sigs is_rec) do_next
202 %   = tcBindAndThen bind sigs do_next
203 \end{pseudocode}
204
205
206 %************************************************************************
207 %*                                                                      *
208 \subsection{tcBindWithSigs}
209 %*                                                                      *
210 %************************************************************************
211
212 @tcBindWithSigs@ deals with a single binding group.  It does generalisation,
213 so all the clever stuff is in here.
214
215 * binder_names and mbind must define the same set of Names
216
217 * The Names in tc_ty_sigs must be a subset of binder_names
218
219 * The Ids in tc_ty_sigs don't necessarily have to have the same name
220   as the Name in the tc_ty_sig
221
222 \begin{code}
223 tcBindWithSigs  
224         :: TopLevelFlag
225         -> RenamedMonoBinds
226         -> [TcSigInfo]
227         -> [RenamedSig]         -- Used solely to get INLINE, NOINLINE sigs
228         -> RecFlag
229         -> TcM s (TcMonoBinds, LIE, [TcId])
230
231 tcBindWithSigs top_lvl mbind tc_ty_sigs inline_sigs is_rec
232   = recoverTc (
233         -- If typechecking the binds fails, then return with each
234         -- signature-less binder given type (forall a.a), to minimise subsequent
235         -- error messages
236         newTyVar boxedTypeKind          `thenNF_Tc` \ alpha_tv ->
237         let
238           forall_a_a    = mkForAllTy alpha_tv (mkTyVarTy alpha_tv)
239           binder_names  = map fst (bagToList (collectMonoBinders mbind))
240           poly_ids      = map mk_dummy binder_names
241           mk_dummy name = case maybeSig tc_ty_sigs name of
242                             Just (TySigInfo _ poly_id _ _ _ _ _ _) -> poly_id   -- Signature
243                             Nothing -> mkVanillaId name forall_a_a              -- No signature
244         in
245         returnTc (EmptyMonoBinds, emptyLIE, poly_ids)
246     ) $
247
248         -- TYPECHECK THE BINDINGS
249     tcMonoBinds mbind tc_ty_sigs is_rec         `thenTc` \ (mbind', lie_req, binder_names, mono_ids) ->
250
251         -- CHECK THAT THE SIGNATURES MATCH
252         -- (must do this before getTyVarsToGen)
253     checkSigMatch top_lvl binder_names mono_ids tc_ty_sigs      `thenTc` \ maybe_sig_theta ->   
254
255         -- IMPROVE the LIE
256         -- Force any unifications dictated by functional dependencies.
257         -- Because unification may happen, it's important that this step
258         -- come before:
259         --   - computing vars over which to quantify
260         --   - zonking the generalized type vars
261     let lie_avail = case maybe_sig_theta of
262                       Nothing      -> emptyLIE
263                       Just (_, la) -> la in
264     tcImprove (lie_avail `plusLIE` lie_req)                     `thenTc_`
265
266         -- COMPUTE VARIABLES OVER WHICH TO QUANTIFY, namely tyvars_to_gen
267         -- The tyvars_not_to_gen are free in the environment, and hence
268         -- candidates for generalisation, but sometimes the monomorphism
269         -- restriction means we can't generalise them nevertheless
270     let
271         mono_id_tys = map idType mono_ids
272     in
273     getTyVarsToGen is_unrestricted mono_id_tys lie_req  `thenNF_Tc` \ (tyvars_not_to_gen, tyvars_to_gen) ->
274
275         -- Finally, zonk the generalised type variables to real TyVars
276         -- This commits any unbound kind variables to boxed kind
277         -- I'm a little worried that such a kind variable might be
278         -- free in the environment, but I don't think it's possible for
279         -- this to happen when the type variable is not free in the envt
280         -- (which it isn't).            SLPJ Nov 98
281     mapTc zonkTcTyVarToTyVar (varSetElems tyvars_to_gen)        `thenTc` \ real_tyvars_to_gen_list ->
282     let
283         real_tyvars_to_gen = mkVarSet real_tyvars_to_gen_list
284                 -- It's important that the final list 
285                 -- (real_tyvars_to_gen and real_tyvars_to_gen_list) is fully
286                 -- zonked, *including boxity*, because they'll be included in the forall types of
287                 -- the polymorphic Ids, and instances of these Ids will be generated from them.
288                 -- 
289                 -- Also NB that tcSimplify takes zonked tyvars as its arg, hence we pass
290                 -- real_tyvars_to_gen
291     in
292
293         -- SIMPLIFY THE LIE
294     tcExtendGlobalTyVars tyvars_not_to_gen (
295         let ips = getIPsOfLIE lie_req in
296         if null real_tyvars_to_gen_list && (null ips || not is_unrestricted) then
297                 -- No polymorphism, and no IPs, so no need to simplify context
298             returnTc (lie_req, EmptyMonoBinds, [])
299         else
300         case maybe_sig_theta of
301           Nothing ->
302                 -- No signatures, so just simplify the lie
303                 -- NB: no signatures => no polymorphic recursion, so no
304                 -- need to use lie_avail (which will be empty anyway)
305             tcSimplify (text "tcBinds1" <+> ppr binder_names)
306                        real_tyvars_to_gen lie_req       `thenTc` \ (lie_free, dict_binds, lie_bound) ->
307             returnTc (lie_free, dict_binds, map instToId (bagToList lie_bound))
308
309           Just (sig_theta, lie_avail) ->
310                 -- There are signatures, and their context is sig_theta
311                 -- Furthermore, lie_avail is an LIE containing the 'method insts'
312                 -- for the things bound here
313
314             zonkTcThetaType sig_theta                   `thenNF_Tc` \ sig_theta' ->
315             newDicts SignatureOrigin sig_theta'         `thenNF_Tc` \ (dicts_sig, dict_ids) ->
316                 -- It's important that sig_theta is zonked, because
317                 -- dict_id is later used to form the type of the polymorphic thing,
318                 -- and forall-types must be zonked so far as their bound variables
319                 -- are concerned
320
321             let
322                 -- The "givens" is the stuff available.  We get that from
323                 -- the context of the type signature, BUT ALSO the lie_avail
324                 -- so that polymorphic recursion works right (see comments at end of fn)
325                 givens = dicts_sig `plusLIE` lie_avail
326             in
327
328                 -- Check that the needed dicts can be expressed in
329                 -- terms of the signature ones
330             tcAddErrCtxt  (bindSigsCtxt tysig_names) $
331             tcSimplifyAndCheck
332                 (ptext SLIT("type signature for") <+> pprQuotedList binder_names)
333                 real_tyvars_to_gen givens lie_req       `thenTc` \ (lie_free, dict_binds) ->
334
335             returnTc (lie_free, dict_binds, dict_ids)
336
337     )                                           `thenTc` \ (lie_free, dict_binds, dicts_bound) ->
338
339         -- GET THE FINAL MONO_ID_TYS
340     zonkTcTypes mono_id_tys                     `thenNF_Tc` \ zonked_mono_id_types ->
341
342
343         -- CHECK FOR BOGUS UNPOINTED BINDINGS
344     (if any isUnLiftedType zonked_mono_id_types then
345                 -- Unlifted bindings must be non-recursive,
346                 -- not top level, and non-polymorphic
347         checkTc (isNotTopLevel top_lvl)
348                 (unliftedBindErr "Top-level" mbind)             `thenTc_`
349         checkTc (case is_rec of {Recursive -> False; NonRecursive -> True})
350                 (unliftedBindErr "Recursive" mbind)             `thenTc_`
351         checkTc (null real_tyvars_to_gen_list)
352                 (unliftedBindErr "Polymorphic" mbind)
353      else
354         returnTc ()
355     )                                                   `thenTc_`
356
357     ASSERT( not (any ((== unboxedTypeKind) . tyVarKind) real_tyvars_to_gen_list) )
358                 -- The instCantBeGeneralised stuff in tcSimplify should have
359                 -- already raised an error if we're trying to generalise an 
360                 -- unboxed tyvar (NB: unboxed tyvars are always introduced 
361                 -- along with a class constraint) and it's better done there 
362                 -- because we have more precise origin information.
363                 -- That's why we just use an ASSERT here.
364
365
366          -- BUILD THE POLYMORPHIC RESULT IDs
367     mapNF_Tc zonkId mono_ids            `thenNF_Tc` \ zonked_mono_ids ->
368     let
369         exports  = zipWith mk_export binder_names zonked_mono_ids
370         dict_tys = map idType dicts_bound
371
372         inlines    = mkNameSet [name | InlineSig name _ loc <- inline_sigs]
373         no_inlines = listToFM ([(name, IMustNotBeINLINEd False phase) | NoInlineSig name phase loc <- inline_sigs] ++
374                                [(name, IMustNotBeINLINEd True  phase) | InlineSig   name phase loc <- inline_sigs, maybeToBool phase])
375                 -- "INLINE n foo" means inline foo, but not until at least phase n
376                 -- "NOINLINE n foo" means don't inline foo until at least phase n, and even 
377                 --                  then only if it is small enough etc.
378                 -- "NOINLINE foo" means don't inline foo ever, which we signal with a (IMustNotBeINLINEd Nothing)
379                 -- See comments in CoreUnfold.blackListed for the Authorised Version
380
381         mk_export binder_name zonked_mono_id
382           = (tyvars, 
383              attachNoInlinePrag no_inlines poly_id,
384              zonked_mono_id)
385           where
386             (tyvars, poly_id) = 
387                 case maybeSig tc_ty_sigs binder_name of
388                   Just (TySigInfo _ sig_poly_id sig_tyvars _ _ _ _ _) -> 
389                         (sig_tyvars, sig_poly_id)
390                   Nothing -> (real_tyvars_to_gen_list, new_poly_id)
391
392             new_poly_id = mkVanillaId binder_name poly_ty
393             poly_ty = mkForAllTys real_tyvars_to_gen_list 
394                         $ mkFunTys dict_tys 
395                         $ idType (zonked_mono_id)
396                 -- It's important to build a fully-zonked poly_ty, because
397                 -- we'll slurp out its free type variables when extending the
398                 -- local environment (tcExtendLocalValEnv); if it's not zonked
399                 -- it appears to have free tyvars that aren't actually free 
400                 -- at all.
401         
402         pat_binders :: [Name]
403         pat_binders = map fst $ bagToList $ collectMonoBinders $ 
404                       (justPatBindings mbind EmptyMonoBinds)
405     in
406         -- CHECK FOR UNBOXED BINDERS IN PATTERN BINDINGS
407     mapTc (\id -> checkTc (not (idName id `elem` pat_binders
408                                 && isUnboxedType (idType id)))
409                           (unboxedPatBindErr id)) zonked_mono_ids
410                                 `thenTc_`
411
412          -- BUILD RESULTS
413     returnTc (
414          -- pprTrace "binding.." (ppr ((dicts_bound, dict_binds), exports, [idType poly_id | (_, poly_id, _) <- exports])) $
415          AbsBinds real_tyvars_to_gen_list
416                   dicts_bound
417                   exports
418                   inlines
419                   (dict_binds `andMonoBinds` mbind'),
420          lie_free,
421          [poly_id | (_, poly_id, _) <- exports]
422     )
423   where
424     tysig_names     = [name | (TySigInfo name _ _ _ _ _ _ _) <- tc_ty_sigs]
425     is_unrestricted = isUnRestrictedGroup tysig_names mbind
426
427 justPatBindings bind@(PatMonoBind _ _ _) binds = bind `andMonoBinds` binds
428 justPatBindings (AndMonoBinds b1 b2) binds = 
429         justPatBindings b1 (justPatBindings b2 binds) 
430 justPatBindings other_bind binds = binds
431
432 attachNoInlinePrag no_inlines bndr
433   = case lookupFM no_inlines (idName bndr) of
434         Just prag -> bndr `setInlinePragma` prag
435         Nothing   -> bndr
436 \end{code}
437
438 Polymorphic recursion
439 ~~~~~~~~~~~~~~~~~~~~~
440 The game plan for polymorphic recursion in the code above is 
441
442         * Bind any variable for which we have a type signature
443           to an Id with a polymorphic type.  Then when type-checking 
444           the RHSs we'll make a full polymorphic call.
445
446 This fine, but if you aren't a bit careful you end up with a horrendous
447 amount of partial application and (worse) a huge space leak. For example:
448
449         f :: Eq a => [a] -> [a]
450         f xs = ...f...
451
452 If we don't take care, after typechecking we get
453
454         f = /\a -> \d::Eq a -> let f' = f a d
455                                in
456                                \ys:[a] -> ...f'...
457
458 Notice the the stupid construction of (f a d), which is of course
459 identical to the function we're executing.  In this case, the
460 polymorphic recursion isn't being used (but that's a very common case).
461 We'd prefer
462
463         f = /\a -> \d::Eq a -> letrec
464                                  fm = \ys:[a] -> ...fm...
465                                in
466                                fm
467
468 This can lead to a massive space leak, from the following top-level defn
469 (post-typechecking)
470
471         ff :: [Int] -> [Int]
472         ff = f Int dEqInt
473
474 Now (f dEqInt) evaluates to a lambda that has f' as a free variable; but
475 f' is another thunk which evaluates to the same thing... and you end
476 up with a chain of identical values all hung onto by the CAF ff.
477
478         ff = f Int dEqInt
479
480            = let f' = f Int dEqInt in \ys. ...f'...
481
482            = let f' = let f' = f Int dEqInt in \ys. ...f'...
483                       in \ys. ...f'...
484
485 Etc.
486 Solution: when typechecking the RHSs we always have in hand the
487 *monomorphic* Ids for each binding.  So we just need to make sure that
488 if (Method f a d) shows up in the constraints emerging from (...f...)
489 we just use the monomorphic Id.  We achieve this by adding monomorphic Ids
490 to the "givens" when simplifying constraints.  That's what the "lies_avail"
491 is doing.
492
493
494 %************************************************************************
495 %*                                                                      *
496 \subsection{getTyVarsToGen}
497 %*                                                                      *
498 %************************************************************************
499
500 @getTyVarsToGen@ decides what type variables to generalise over.
501
502 For a "restricted group" -- see the monomorphism restriction
503 for a definition -- we bind no dictionaries, and
504 remove from tyvars_to_gen any constrained type variables
505
506 *Don't* simplify dicts at this point, because we aren't going
507 to generalise over these dicts.  By the time we do simplify them
508 we may well know more.  For example (this actually came up)
509         f :: Array Int Int
510         f x = array ... xs where xs = [1,2,3,4,5]
511 We don't want to generate lots of (fromInt Int 1), (fromInt Int 2)
512 stuff.  If we simplify only at the f-binding (not the xs-binding)
513 we'll know that the literals are all Ints, and we can just produce
514 Int literals!
515
516 Find all the type variables involved in overloading, the
517 "constrained_tyvars".  These are the ones we *aren't* going to
518 generalise.  We must be careful about doing this:
519
520  (a) If we fail to generalise a tyvar which is not actually
521         constrained, then it will never, ever get bound, and lands
522         up printed out in interface files!  Notorious example:
523                 instance Eq a => Eq (Foo a b) where ..
524         Here, b is not constrained, even though it looks as if it is.
525         Another, more common, example is when there's a Method inst in
526         the LIE, whose type might very well involve non-overloaded
527         type variables.
528
529  (b) On the other hand, we mustn't generalise tyvars which are constrained,
530         because we are going to pass on out the unmodified LIE, with those
531         tyvars in it.  They won't be in scope if we've generalised them.
532
533 So we are careful, and do a complete simplification just to find the
534 constrained tyvars. We don't use any of the results, except to
535 find which tyvars are constrained.
536
537 \begin{code}
538 getTyVarsToGen is_unrestricted mono_id_tys lie
539   = tcGetGlobalTyVars                   `thenNF_Tc` \ free_tyvars ->
540     zonkTcTypes mono_id_tys             `thenNF_Tc` \ zonked_mono_id_tys ->
541     let
542         body_tyvars = tyVarsOfTypes zonked_mono_id_tys `minusVarSet` free_tyvars
543         fds         = getAllFunDepsOfLIE lie
544     in
545     if is_unrestricted
546     then
547           -- We need to augment the type variables that appear explicitly in
548           -- the type by those that are determined by the functional dependencies.
549           -- e.g. suppose our type is   C a b => a -> a
550           --    with the fun-dep  a->b
551           -- Then we should generalise over b too; otherwise it will be
552           -- reported as ambiguous.
553         zonkFunDeps fds         `thenNF_Tc` \ fds' ->
554         let tvFundep        = tyVarFunDep fds'
555             extended_tyvars = oclose tvFundep body_tyvars
556         in
557         returnNF_Tc (emptyVarSet, extended_tyvars)
558     else
559         -- This recover and discard-errs is to avoid duplicate error
560         -- messages; this, after all, is an "extra" call to tcSimplify
561         recoverNF_Tc (returnNF_Tc (emptyVarSet, body_tyvars))           $
562         discardErrsTc                                                   $
563
564         tcSimplify (text "getTVG") body_tyvars lie    `thenTc` \ (_, _, constrained_dicts) ->
565         let
566           -- ASSERT: dicts_sig is already zonked!
567             constrained_tyvars    = foldrBag (unionVarSet . tyVarsOfInst) emptyVarSet constrained_dicts
568             reduced_tyvars_to_gen = body_tyvars `minusVarSet` constrained_tyvars
569         in
570         returnTc (constrained_tyvars, reduced_tyvars_to_gen)
571 \end{code}
572
573
574 \begin{code}
575 isUnRestrictedGroup :: [Name]           -- Signatures given for these
576                     -> RenamedMonoBinds
577                     -> Bool
578
579 is_elem v vs = isIn "isUnResMono" v vs
580
581 isUnRestrictedGroup sigs (PatMonoBind other        _ _) = False
582 isUnRestrictedGroup sigs (VarMonoBind v _)              = v `is_elem` sigs
583 isUnRestrictedGroup sigs (FunMonoBind v _ matches _)    = any isUnRestrictedMatch matches || 
584                                                           v `is_elem` sigs
585 isUnRestrictedGroup sigs (AndMonoBinds mb1 mb2)         = isUnRestrictedGroup sigs mb1 &&
586                                                           isUnRestrictedGroup sigs mb2
587 isUnRestrictedGroup sigs EmptyMonoBinds                 = True
588
589 isUnRestrictedMatch (Match _ [] Nothing _) = False      -- No args, no signature
590 isUnRestrictedMatch other                  = True       -- Some args or a signature
591 \end{code}
592
593
594 %************************************************************************
595 %*                                                                      *
596 \subsection{tcMonoBind}
597 %*                                                                      *
598 %************************************************************************
599
600 @tcMonoBinds@ deals with a single @MonoBind@.  
601 The signatures have been dealt with already.
602
603 \begin{code}
604 tcMonoBinds :: RenamedMonoBinds 
605             -> [TcSigInfo]
606             -> RecFlag
607             -> TcM s (TcMonoBinds, 
608                       LIE,              -- LIE required
609                       [Name],           -- Bound names
610                       [TcId])   -- Corresponding monomorphic bound things
611
612 tcMonoBinds mbinds tc_ty_sigs is_rec
613   = tc_mb_pats mbinds           `thenTc` \ (complete_it, lie_req_pat, tvs, ids, lie_avail) ->
614     let
615         tv_list           = bagToList tvs
616         id_list           = bagToList ids
617         (names, mono_ids) = unzip id_list
618
619                 -- This last defn is the key one:
620                 -- extend the val envt with bindings for the 
621                 -- things bound in this group, overriding the monomorphic
622                 -- ids with the polymorphic ones from the pattern
623         extra_val_env = case is_rec of
624                           Recursive    -> map mk_bind id_list
625                           NonRecursive -> []
626     in
627         -- Don't know how to deal with pattern-bound existentials yet
628     checkTc (isEmptyBag tvs && isEmptyBag lie_avail) 
629             (existentialExplode mbinds)                 `thenTc_` 
630
631         -- *Before* checking the RHSs, but *after* checking *all* the patterns,
632         -- extend the envt with bindings for all the bound ids;
633         --   and *then* override with the polymorphic Ids from the signatures
634         -- That is the whole point of the "complete_it" stuff.
635         --
636         -- There's a further wrinkle: we have to delay extending the environment
637         -- until after we've dealt with any pattern-bound signature type variables
638         -- Consider  f (x::a) = ...f...
639         -- We're going to check that a isn't unified with anything in the envt, 
640         -- so f itself had better not be!  So we pass the envt binding f into
641         -- complete_it, which extends the actual envt in TcMatches.tcMatch, after
642         -- dealing with the signature tyvars
643
644     complete_it extra_val_env                           `thenTc` \ (mbinds', lie_req_rhss) ->
645
646     returnTc (mbinds', lie_req_pat `plusLIE` lie_req_rhss, names, mono_ids)
647   where
648
649         -- This function is used when dealing with a LHS binder; we make a monomorphic
650         -- version of the Id.  We check for type signatures
651     tc_pat_bndr name pat_ty
652         = case maybeSig tc_ty_sigs name of
653             Nothing
654                 -> newLocalId (getOccName name) pat_ty (getSrcLoc name)
655
656             Just (TySigInfo _ _ _ _ _ mono_id _ _)
657                 -> tcAddSrcLoc (getSrcLoc name)                         $
658                    unifyTauTy (idType mono_id) pat_ty   `thenTc_`
659                    returnTc mono_id
660
661     mk_bind (name, mono_id) = case maybeSig tc_ty_sigs name of
662                                 Nothing                                   -> (name, mono_id)
663                                 Just (TySigInfo name poly_id _ _ _ _ _ _) -> (name, poly_id)
664
665     tc_mb_pats EmptyMonoBinds
666       = returnTc (\ xve -> returnTc (EmptyMonoBinds, emptyLIE), emptyLIE, emptyBag, emptyBag, emptyLIE)
667
668     tc_mb_pats (AndMonoBinds mb1 mb2)
669       = tc_mb_pats mb1          `thenTc` \ (complete_it1, lie_req1, tvs1, ids1, lie_avail1) ->
670         tc_mb_pats mb2          `thenTc` \ (complete_it2, lie_req2, tvs2, ids2, lie_avail2) ->
671         let
672            complete_it xve = complete_it1 xve   `thenTc` \ (mb1', lie1) ->
673                              complete_it2 xve   `thenTc` \ (mb2', lie2) ->
674                              returnTc (AndMonoBinds mb1' mb2', lie1 `plusLIE` lie2)
675         in
676         returnTc (complete_it,
677                   lie_req1 `plusLIE` lie_req2,
678                   tvs1 `unionBags` tvs2,
679                   ids1 `unionBags` ids2,
680                   lie_avail1 `plusLIE` lie_avail2)
681
682     tc_mb_pats (FunMonoBind name inf matches locn)
683       = new_lhs_ty                      `thenNF_Tc` \ bndr_ty ->
684         tc_pat_bndr name bndr_ty        `thenTc` \ bndr_id ->
685         let
686            complete_it xve = tcAddSrcLoc locn                           $
687                              tcMatchesFun xve name bndr_ty  matches     `thenTc` \ (matches', lie) ->
688                              returnTc (FunMonoBind bndr_id inf matches' locn, lie)
689         in
690         returnTc (complete_it, emptyLIE, emptyBag, unitBag (name, bndr_id), emptyLIE)
691
692     tc_mb_pats bind@(PatMonoBind pat grhss locn)
693       = tcAddSrcLoc locn                $
694         new_lhs_ty                      `thenNF_Tc` \ pat_ty -> 
695
696                 --      Now typecheck the pattern
697                 -- We don't support binding fresh type variables in the
698                 -- pattern of a pattern binding.  For example, this is illegal:
699                 --      (x::a, y::b) = e
700                 -- whereas this is ok
701                 --      (x::Int, y::Bool) = e
702                 --
703                 -- We don't check explicitly for this problem.  Instead, we simply
704                 -- type check the pattern with tcPat.  If the pattern mentions any
705                 -- fresh tyvars we simply get an out-of-scope type variable error
706         tcPat tc_pat_bndr pat pat_ty            `thenTc` \ (pat', lie_req, tvs, ids, lie_avail) ->
707         let
708            complete_it xve = tcAddSrcLoc locn                           $
709                              tcAddErrCtxt (patMonoBindsCtxt bind)       $
710                              tcExtendLocalValEnv xve                    $
711                              tcGRHSs grhss pat_ty PatBindRhs            `thenTc` \ (grhss', lie) ->
712                              returnTc (PatMonoBind pat' grhss' locn, lie)
713         in
714         returnTc (complete_it, lie_req, tvs, ids, lie_avail)
715
716         -- Figure out the appropriate kind for the pattern,
717         -- and generate a suitable type variable 
718     new_lhs_ty = case is_rec of
719                      Recursive    -> newTyVarTy boxedTypeKind   -- Recursive, so no unboxed types
720                      NonRecursive -> newTyVarTy_OpenKind        -- Non-recursive, so we permit unboxed types
721 \end{code}
722
723 %************************************************************************
724 %*                                                                      *
725 \subsection{Signatures}
726 %*                                                                      *
727 %************************************************************************
728
729 @checkSigMatch@ does the next step in checking signature matching.
730 The tau-type part has already been unified.  What we do here is to
731 check that this unification has not over-constrained the (polymorphic)
732 type variables of the original signature type.
733
734 The error message here is somewhat unsatisfactory, but it'll do for
735 now (ToDo).
736
737 \begin{code}
738 checkSigMatch :: TopLevelFlag -> [Name] -> [TcId] -> [TcSigInfo] -> TcM s (Maybe (TcThetaType, LIE))
739 checkSigMatch top_lvl binder_names mono_ids sigs
740   | main_bound_here
741   =     -- First unify the main_id with IO t, for any old t
742     tcSetErrCtxt mainTyCheckCtxt (
743         tcLookupTyConByKey ioTyConKey           `thenTc`    \ ioTyCon ->
744         newTyVarTy boxedTypeKind                `thenNF_Tc` \ t_tv ->
745         unifyTauTy ((mkTyConApp ioTyCon [t_tv]))
746                    (idType main_mono_id)
747     )                                           `thenTc_`
748
749         -- Now check the signatures
750         -- Must do this after the unification with IO t, 
751         -- in case of a silly signature like
752         --      main :: forall a. a
753         -- The unification to IO t will bind the type variable 'a',
754         -- which is just waht check_one_sig looks for
755     mapTc check_one_sig sigs                    `thenTc_`
756     mapTc check_main_ctxt sigs                  `thenTc_` 
757
758             returnTc (Just ([], emptyLIE))
759
760   | not (null sigs)
761   = mapTc check_one_sig sigs                    `thenTc_`
762     mapTc check_one_ctxt all_sigs_but_first     `thenTc_`
763     returnTc (Just (theta1, sig_lie))
764
765   | otherwise
766   = returnTc Nothing            -- No constraints from type sigs
767
768   where
769     (TySigInfo _ id1 _ theta1 _ _ _ _ : all_sigs_but_first) = sigs
770
771     sig1_dict_tys       = mk_dict_tys theta1
772     n_sig1_dict_tys     = length sig1_dict_tys
773     sig_lie             = mkLIE (concat [insts | TySigInfo _ _ _ _ _ _ insts _ <- sigs])
774
775     maybe_main        = find_main top_lvl binder_names mono_ids
776     main_bound_here   = maybeToBool maybe_main
777     Just main_mono_id = maybe_main
778                       
779         -- CHECK THAT THE SIGNATURE TYVARS AND TAU_TYPES ARE OK
780         -- Doesn't affect substitution
781     check_one_sig (TySigInfo _ id sig_tyvars sig_theta sig_tau _ _ src_loc)
782       = tcAddSrcLoc src_loc                                     $
783         tcAddErrCtxtM (sigCtxt (sig_msg id) sig_tyvars sig_theta sig_tau)       $
784         checkSigTyVars sig_tyvars (idFreeTyVars id)
785
786
787         -- CHECK THAT ALL THE SIGNATURE CONTEXTS ARE UNIFIABLE
788         -- The type signatures on a mutually-recursive group of definitions
789         -- must all have the same context (or none).
790         --
791         -- We unify them because, with polymorphic recursion, their types
792         -- might not otherwise be related.  This is a rather subtle issue.
793         -- ToDo: amplify
794     check_one_ctxt sig@(TySigInfo _ id _ theta _ _ _ src_loc)
795        = tcAddSrcLoc src_loc    $
796          tcAddErrCtxt (sigContextsCtxt id1 id) $
797          checkTc (length this_sig_dict_tys == n_sig1_dict_tys)
798                                 sigContextsErr          `thenTc_`
799          unifyTauTyLists sig1_dict_tys this_sig_dict_tys
800       where
801          this_sig_dict_tys = mk_dict_tys theta
802
803         -- CHECK THAT FOR A GROUP INVOLVING Main.main, all 
804         -- the signature contexts are empty (what a bore)
805     check_main_ctxt sig@(TySigInfo _ id _ theta _ _ _ src_loc)
806         = tcAddSrcLoc src_loc   $
807           checkTc (null theta) (mainContextsErr id)
808
809     mk_dict_tys theta = map mkPredTy theta
810
811     sig_msg id = ptext SLIT("When checking the type signature for") <+> quotes (ppr id)
812
813         -- Search for Main.main in the binder_names, return corresponding mono_id
814     find_main NotTopLevel binder_names mono_ids = Nothing
815     find_main TopLevel    binder_names mono_ids = go binder_names mono_ids
816     go [] [] = Nothing
817     go (n:ns) (m:ms) | n `hasKey` mainKey = Just m
818                      | otherwise          = go ns ms
819 \end{code}
820
821
822 %************************************************************************
823 %*                                                                      *
824 \subsection{SPECIALIZE pragmas}
825 %*                                                                      *
826 %************************************************************************
827
828 @tcSpecSigs@ munches up the specialisation "signatures" that arise through *user*
829 pragmas.  It is convenient for them to appear in the @[RenamedSig]@
830 part of a binding because then the same machinery can be used for
831 moving them into place as is done for type signatures.
832
833 They look like this:
834
835 \begin{verbatim}
836         f :: Ord a => [a] -> b -> b
837         {-# SPECIALIZE f :: [Int] -> b -> b #-}
838 \end{verbatim}
839
840 For this we generate:
841 \begin{verbatim}
842         f* = /\ b -> let d1 = ...
843                      in f Int b d1
844 \end{verbatim}
845
846 where f* is a SpecPragmaId.  The **sole** purpose of SpecPragmaIds is to
847 retain a right-hand-side that the simplifier will otherwise discard as
848 dead code... the simplifier has a flag that tells it not to discard
849 SpecPragmaId bindings.
850
851 In this case the f* retains a call-instance of the overloaded
852 function, f, (including appropriate dictionaries) so that the
853 specialiser will subsequently discover that there's a call of @f@ at
854 Int, and will create a specialisation for @f@.  After that, the
855 binding for @f*@ can be discarded.
856
857 We used to have a form
858         {-# SPECIALISE f :: <type> = g #-}
859 which promised that g implemented f at <type>, but we do that with 
860 a RULE now:
861         {-# SPECIALISE (f::<type) = g #-}
862
863 \begin{code}
864 tcSpecSigs :: [RenamedSig] -> TcM s (TcMonoBinds, LIE)
865 tcSpecSigs (SpecSig name poly_ty src_loc : sigs)
866   =     -- SPECIALISE f :: forall b. theta => tau  =  g
867     tcAddSrcLoc src_loc                         $
868     tcAddErrCtxt (valSpecSigCtxt name poly_ty)  $
869
870         -- Get and instantiate its alleged specialised type
871     tcHsSigType poly_ty                         `thenTc` \ sig_ty ->
872
873         -- Check that f has a more general type, and build a RHS for
874         -- the spec-pragma-id at the same time
875     tcExpr (HsVar name) sig_ty                  `thenTc` \ (spec_expr, spec_lie) ->
876
877         -- Squeeze out any Methods (see comments with tcSimplifyToDicts)
878     tcSimplifyToDicts spec_lie                  `thenTc` \ (spec_lie1, spec_binds) ->
879
880         -- Just specialise "f" by building a SpecPragmaId binding
881         -- It is the thing that makes sure we don't prematurely 
882         -- dead-code-eliminate the binding we are really interested in.
883     newSpecPragmaId name sig_ty         `thenNF_Tc` \ spec_id ->
884
885         -- Do the rest and combine
886     tcSpecSigs sigs                     `thenTc` \ (binds_rest, lie_rest) ->
887     returnTc (binds_rest `andMonoBinds` VarMonoBind spec_id (mkHsLet spec_binds spec_expr),
888               lie_rest   `plusLIE`      spec_lie1)
889
890 tcSpecSigs (other_sig : sigs) = tcSpecSigs sigs
891 tcSpecSigs []                 = returnTc (EmptyMonoBinds, emptyLIE)
892 \end{code}
893
894
895 %************************************************************************
896 %*                                                                      *
897 \subsection[TcBinds-errors]{Error contexts and messages}
898 %*                                                                      *
899 %************************************************************************
900
901
902 \begin{code}
903 patMonoBindsCtxt bind
904   = hang (ptext SLIT("In a pattern binding:")) 4 (ppr bind)
905
906 -----------------------------------------------
907 valSpecSigCtxt v ty
908   = sep [ptext SLIT("In a SPECIALIZE pragma for a value:"),
909          nest 4 (ppr v <+> dcolon <+> ppr ty)]
910
911 -----------------------------------------------
912 notAsPolyAsSigErr sig_tau mono_tyvars
913   = hang (ptext SLIT("A type signature is more polymorphic than the inferred type"))
914         4  (vcat [text "Can't for-all the type variable(s)" <+> 
915                   pprQuotedList mono_tyvars,
916                   text "in the type" <+> quotes (ppr sig_tau)
917            ])
918
919 -----------------------------------------------
920 badMatchErr sig_ty inferred_ty
921   = hang (ptext SLIT("Type signature doesn't match inferred type"))
922          4 (vcat [hang (ptext SLIT("Signature:")) 4 (ppr sig_ty),
923                       hang (ptext SLIT("Inferred :")) 4 (ppr inferred_ty)
924            ])
925
926 -----------------------------------------------
927 unboxedPatBindErr id
928   = ptext SLIT("variable in a lazy pattern binding has unboxed type: ")
929          <+> quotes (ppr id)
930
931 -----------------------------------------------
932 bindSigsCtxt ids
933   = ptext SLIT("When checking the type signature(s) for") <+> pprQuotedList ids
934
935 -----------------------------------------------
936 sigContextsErr
937   = ptext SLIT("Mismatched contexts")
938
939 sigContextsCtxt s1 s2
940   = hang (hsep [ptext SLIT("When matching the contexts of the signatures for"), 
941                 quotes (ppr s1), ptext SLIT("and"), quotes (ppr s2)])
942          4 (ptext SLIT("(the signature contexts in a mutually recursive group should all be identical)"))
943
944 mainContextsErr id
945   | id `hasKey` mainKey = ptext SLIT("Main.main cannot be overloaded")
946   | otherwise
947   = quotes (ppr id) <+> ptext SLIT("cannot be overloaded") <> char ',' <> -- sigh; workaround for cpp's inability to deal
948     ptext SLIT("because it is mutually recursive with Main.main")         -- with commas inside SLIT strings.
949
950 mainTyCheckCtxt
951   = hsep [ptext SLIT("When checking that"), quotes (ptext SLIT("main")),
952           ptext SLIT("has the required type")]
953
954 -----------------------------------------------
955 unliftedBindErr flavour mbind
956   = hang (text flavour <+> ptext SLIT("bindings for unlifted types aren't allowed"))
957          4 (ppr mbind)
958
959 existentialExplode mbinds
960   = hang (vcat [text "My brain just exploded.",
961                 text "I can't handle pattern bindings for existentially-quantified constructors.",
962                 text "In the binding group"])
963         4 (ppr mbinds)
964 \end{code}