[project @ 2000-08-01 09:08:25 by simonpj]
[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, 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, openTypeKind
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 Outputable
65 \end{code}
66
67
68 %************************************************************************
69 %*                                                                      *
70 \subsection{Type-checking bindings}
71 %*                                                                      *
72 %************************************************************************
73
74 @tcBindsAndThen@ typechecks a @HsBinds@.  The "and then" part is because
75 it needs to know something about the {\em usage} of the things bound,
76 so that it can create specialisations of them.  So @tcBindsAndThen@
77 takes a function which, given an extended environment, E, typechecks
78 the scope of the bindings returning a typechecked thing and (most
79 important) an LIE.  It is this LIE which is then used as the basis for
80 specialising the things bound.
81
82 @tcBindsAndThen@ also takes a "combiner" which glues together the
83 bindings and the "thing" to make a new "thing".
84
85 The real work is done by @tcBindWithSigsAndThen@.
86
87 Recursive and non-recursive binds are handled in essentially the same
88 way: because of uniques there are no scoping issues left.  The only
89 difference is that non-recursive bindings can bind primitive values.
90
91 Even for non-recursive binding groups we add typings for each binder
92 to the LVE for the following reason.  When each individual binding is
93 checked the type of its LHS is unified with that of its RHS; and
94 type-checking the LHS of course requires that the binder is in scope.
95
96 At the top-level the LIE is sure to contain nothing but constant
97 dictionaries, which we resolve at the module level.
98
99 \begin{code}
100 tcTopBindsAndThen, tcBindsAndThen
101         :: (RecFlag -> TcMonoBinds -> thing -> thing)           -- Combinator
102         -> RenamedHsBinds
103         -> TcM s (thing, LIE)
104         -> TcM s (thing, LIE)
105
106 tcTopBindsAndThen = tc_binds_and_then TopLevel
107 tcBindsAndThen    = tc_binds_and_then NotTopLevel
108
109 tc_binds_and_then top_lvl combiner EmptyBinds do_next
110   = do_next
111 tc_binds_and_then top_lvl combiner (MonoBind EmptyMonoBinds sigs is_rec) do_next
112   = do_next
113
114 tc_binds_and_then top_lvl combiner (ThenBinds b1 b2) do_next
115   = tc_binds_and_then top_lvl combiner b1       $
116     tc_binds_and_then top_lvl combiner b2       $
117     do_next
118
119 tc_binds_and_then top_lvl combiner (MonoBind bind sigs is_rec) do_next
120   =     -- TYPECHECK THE SIGNATURES
121       mapTc tcTySig [sig | sig@(Sig name _ _) <- sigs]  `thenTc` \ tc_ty_sigs ->
122   
123       tcBindWithSigs top_lvl bind tc_ty_sigs
124                      sigs is_rec                        `thenTc` \ (poly_binds, poly_lie, poly_ids) ->
125   
126           -- Extend the environment to bind the new polymorphic Ids
127       tcExtendLocalValEnv [(idName poly_id, poly_id) | poly_id <- poly_ids] $
128   
129           -- Build bindings and IdInfos corresponding to user pragmas
130       tcSpecSigs sigs           `thenTc` \ (prag_binds, prag_lie) ->
131
132         -- Now do whatever happens next, in the augmented envt
133       do_next                   `thenTc` \ (thing, thing_lie) ->
134
135         -- Create specialisations of functions bound here
136         -- We want to keep non-recursive things non-recursive
137         -- so that we desugar unboxed bindings correctly
138       case (top_lvl, is_rec) of
139
140                 -- For the top level don't bother will all this bindInstsOfLocalFuns stuff
141                 -- All the top level things are rec'd together anyway, so it's fine to
142                 -- leave them to the tcSimplifyTop, and quite a bit faster too
143         (TopLevel, _)
144                 -> returnTc (combiner Recursive (poly_binds `andMonoBinds` prag_binds) thing,
145                              thing_lie `plusLIE` prag_lie `plusLIE` poly_lie)
146
147         (NotTopLevel, NonRecursive) 
148                 -> bindInstsOfLocalFuns 
149                                 (thing_lie `plusLIE` prag_lie)
150                                 poly_ids                        `thenTc` \ (thing_lie', lie_binds) ->
151
152                    returnTc (
153                         combiner NonRecursive poly_binds $
154                         combiner NonRecursive prag_binds $
155                         combiner Recursive lie_binds  $
156                                 -- NB: the binds returned by tcSimplify and bindInstsOfLocalFuns
157                                 -- aren't guaranteed in dependency order (though we could change
158                                 -- that); hence the Recursive marker.
159                         thing,
160
161                         thing_lie' `plusLIE` poly_lie
162                    )
163
164         (NotTopLevel, Recursive)
165                 -> bindInstsOfLocalFuns 
166                                 (thing_lie `plusLIE` poly_lie `plusLIE` prag_lie) 
167                                 poly_ids                        `thenTc` \ (final_lie, lie_binds) ->
168
169                    returnTc (
170                         combiner Recursive (
171                                 poly_binds `andMonoBinds`
172                                 lie_binds  `andMonoBinds`
173                                 prag_binds) thing,
174                         final_lie
175                    )
176 \end{code}
177
178 An aside.  The original version of @tcBindsAndThen@ which lacks a
179 combiner function, appears below.  Though it is perfectly well
180 behaved, it cannot be typed by Haskell, because the recursive call is
181 at a different type to the definition itself.  There aren't too many
182 examples of this, which is why I thought it worth preserving! [SLPJ]
183
184 \begin{pseudocode}
185 % tcBindsAndThen
186 %       :: RenamedHsBinds
187 %       -> TcM s (thing, LIE, thing_ty))
188 %       -> TcM s ((TcHsBinds, thing), LIE, thing_ty)
189
190 % tcBindsAndThen EmptyBinds do_next
191 %   = do_next           `thenTc` \ (thing, lie, thing_ty) ->
192 %     returnTc ((EmptyBinds, thing), lie, thing_ty)
193
194 % tcBindsAndThen (ThenBinds binds1 binds2) do_next
195 %   = tcBindsAndThen binds1 (tcBindsAndThen binds2 do_next)
196 %       `thenTc` \ ((binds1', (binds2', thing')), lie1, thing_ty) ->
197
198 %     returnTc ((binds1' `ThenBinds` binds2', thing'), lie1, thing_ty)
199
200 % tcBindsAndThen (MonoBind bind sigs is_rec) do_next
201 %   = tcBindAndThen bind sigs do_next
202 \end{pseudocode}
203
204
205 %************************************************************************
206 %*                                                                      *
207 \subsection{tcBindWithSigs}
208 %*                                                                      *
209 %************************************************************************
210
211 @tcBindWithSigs@ deals with a single binding group.  It does generalisation,
212 so all the clever stuff is in here.
213
214 * binder_names and mbind must define the same set of Names
215
216 * The Names in tc_ty_sigs must be a subset of binder_names
217
218 * The Ids in tc_ty_sigs don't necessarily have to have the same name
219   as the Name in the tc_ty_sig
220
221 \begin{code}
222 tcBindWithSigs  
223         :: TopLevelFlag
224         -> RenamedMonoBinds
225         -> [TcSigInfo]
226         -> [RenamedSig]         -- Used solely to get INLINE, NOINLINE sigs
227         -> RecFlag
228         -> TcM s (TcMonoBinds, LIE, [TcId])
229
230 tcBindWithSigs top_lvl mbind tc_ty_sigs inline_sigs is_rec
231   = recoverTc (
232         -- If typechecking the binds fails, then return with each
233         -- signature-less binder given type (forall a.a), to minimise subsequent
234         -- error messages
235         newTyVar boxedTypeKind          `thenNF_Tc` \ alpha_tv ->
236         let
237           forall_a_a    = mkForAllTy alpha_tv (mkTyVarTy alpha_tv)
238           binder_names  = map fst (bagToList (collectMonoBinders mbind))
239           poly_ids      = map mk_dummy binder_names
240           mk_dummy name = case maybeSig tc_ty_sigs name of
241                             Just (TySigInfo _ poly_id _ _ _ _ _ _) -> poly_id   -- Signature
242                             Nothing -> mkVanillaId name forall_a_a              -- No signature
243         in
244         returnTc (EmptyMonoBinds, emptyLIE, poly_ids)
245     ) $
246
247         -- TYPECHECK THE BINDINGS
248     tcMonoBinds mbind tc_ty_sigs is_rec         `thenTc` \ (mbind', lie_req, binder_names, mono_ids) ->
249
250         -- CHECK THAT THE SIGNATURES MATCH
251         -- (must do this before getTyVarsToGen)
252     checkSigMatch top_lvl binder_names mono_ids tc_ty_sigs      `thenTc` \ maybe_sig_theta ->   
253
254         -- IMPROVE the LIE
255         -- Force any unifications dictated by functional dependencies.
256         -- Because unification may happen, it's important that this step
257         -- come before:
258         --   - computing vars over which to quantify
259         --   - zonking the generalized type vars
260     let lie_avail = case maybe_sig_theta of
261                       Nothing      -> emptyLIE
262                       Just (_, la) -> la
263         lie_avail_req = lie_avail `plusLIE` lie_req in
264     tcImprove lie_avail_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_avail_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         id_list           = bagToList ids
616         (names, mono_ids) = unzip id_list
617
618                 -- This last defn is the key one:
619                 -- extend the val envt with bindings for the 
620                 -- things bound in this group, overriding the monomorphic
621                 -- ids with the polymorphic ones from the pattern
622         extra_val_env = case is_rec of
623                           Recursive    -> map mk_bind id_list
624                           NonRecursive -> []
625     in
626         -- Don't know how to deal with pattern-bound existentials yet
627     checkTc (isEmptyBag tvs && isEmptyBag lie_avail) 
628             (existentialExplode mbinds)                 `thenTc_` 
629
630         -- *Before* checking the RHSs, but *after* checking *all* the patterns,
631         -- extend the envt with bindings for all the bound ids;
632         --   and *then* override with the polymorphic Ids from the signatures
633         -- That is the whole point of the "complete_it" stuff.
634         --
635         -- There's a further wrinkle: we have to delay extending the environment
636         -- until after we've dealt with any pattern-bound signature type variables
637         -- Consider  f (x::a) = ...f...
638         -- We're going to check that a isn't unified with anything in the envt, 
639         -- so f itself had better not be!  So we pass the envt binding f into
640         -- complete_it, which extends the actual envt in TcMatches.tcMatch, after
641         -- dealing with the signature tyvars
642
643     complete_it extra_val_env                           `thenTc` \ (mbinds', lie_req_rhss) ->
644
645     returnTc (mbinds', lie_req_pat `plusLIE` lie_req_rhss, names, mono_ids)
646   where
647
648         -- This function is used when dealing with a LHS binder; we make a monomorphic
649         -- version of the Id.  We check for type signatures
650     tc_pat_bndr name pat_ty
651         = case maybeSig tc_ty_sigs name of
652             Nothing
653                 -> newLocalId (getOccName name) pat_ty (getSrcLoc name)
654
655             Just (TySigInfo _ _ _ _ _ mono_id _ _)
656                 -> tcAddSrcLoc (getSrcLoc name)                         $
657                    unifyTauTy (idType mono_id) pat_ty   `thenTc_`
658                    returnTc mono_id
659
660     mk_bind (name, mono_id) = case maybeSig tc_ty_sigs name of
661                                 Nothing                                   -> (name, mono_id)
662                                 Just (TySigInfo name poly_id _ _ _ _ _ _) -> (name, poly_id)
663
664     tc_mb_pats EmptyMonoBinds
665       = returnTc (\ xve -> returnTc (EmptyMonoBinds, emptyLIE), emptyLIE, emptyBag, emptyBag, emptyLIE)
666
667     tc_mb_pats (AndMonoBinds mb1 mb2)
668       = tc_mb_pats mb1          `thenTc` \ (complete_it1, lie_req1, tvs1, ids1, lie_avail1) ->
669         tc_mb_pats mb2          `thenTc` \ (complete_it2, lie_req2, tvs2, ids2, lie_avail2) ->
670         let
671            complete_it xve = complete_it1 xve   `thenTc` \ (mb1', lie1) ->
672                              complete_it2 xve   `thenTc` \ (mb2', lie2) ->
673                              returnTc (AndMonoBinds mb1' mb2', lie1 `plusLIE` lie2)
674         in
675         returnTc (complete_it,
676                   lie_req1 `plusLIE` lie_req2,
677                   tvs1 `unionBags` tvs2,
678                   ids1 `unionBags` ids2,
679                   lie_avail1 `plusLIE` lie_avail2)
680
681     tc_mb_pats (FunMonoBind name inf matches locn)
682       = newTyVarTy kind                 `thenNF_Tc` \ bndr_ty -> 
683         tc_pat_bndr name bndr_ty        `thenTc` \ bndr_id ->
684         let
685            complete_it xve = tcAddSrcLoc locn                           $
686                              tcMatchesFun xve name bndr_ty  matches     `thenTc` \ (matches', lie) ->
687                              returnTc (FunMonoBind bndr_id inf matches' locn, lie)
688         in
689         returnTc (complete_it, emptyLIE, emptyBag, unitBag (name, bndr_id), emptyLIE)
690
691     tc_mb_pats bind@(PatMonoBind pat grhss locn)
692       = tcAddSrcLoc locn                $
693         newTyVarTy kind                 `thenNF_Tc` \ pat_ty -> 
694
695                 --      Now typecheck the pattern
696                 -- We don't support binding fresh type variables in the
697                 -- pattern of a pattern binding.  For example, this is illegal:
698                 --      (x::a, y::b) = e
699                 -- whereas this is ok
700                 --      (x::Int, y::Bool) = e
701                 --
702                 -- We don't check explicitly for this problem.  Instead, we simply
703                 -- type check the pattern with tcPat.  If the pattern mentions any
704                 -- fresh tyvars we simply get an out-of-scope type variable error
705         tcPat tc_pat_bndr pat pat_ty            `thenTc` \ (pat', lie_req, tvs, ids, lie_avail) ->
706         let
707            complete_it xve = tcAddSrcLoc locn                           $
708                              tcAddErrCtxt (patMonoBindsCtxt bind)       $
709                              tcExtendLocalValEnv xve                    $
710                              tcGRHSs grhss pat_ty PatBindRhs            `thenTc` \ (grhss', lie) ->
711                              returnTc (PatMonoBind pat' grhss' locn, lie)
712         in
713         returnTc (complete_it, lie_req, tvs, ids, lie_avail)
714
715         -- Figure out the appropriate kind for the pattern,
716         -- and generate a suitable type variable 
717     kind = case is_rec of
718                 Recursive    -> boxedTypeKind   -- Recursive, so no unboxed types
719                 NonRecursive -> openTypeKind    -- Non-recursive, so we permit unboxed types
720 \end{code}
721
722 %************************************************************************
723 %*                                                                      *
724 \subsection{Signatures}
725 %*                                                                      *
726 %************************************************************************
727
728 @checkSigMatch@ does the next step in checking signature matching.
729 The tau-type part has already been unified.  What we do here is to
730 check that this unification has not over-constrained the (polymorphic)
731 type variables of the original signature type.
732
733 The error message here is somewhat unsatisfactory, but it'll do for
734 now (ToDo).
735
736 \begin{code}
737 checkSigMatch :: TopLevelFlag -> [Name] -> [TcId] -> [TcSigInfo] -> TcM s (Maybe (TcThetaType, LIE))
738 checkSigMatch top_lvl binder_names mono_ids sigs
739   | main_bound_here
740   =     -- First unify the main_id with IO t, for any old t
741     tcSetErrCtxt mainTyCheckCtxt (
742         tcLookupTyConByKey ioTyConKey           `thenTc`    \ ioTyCon ->
743         newTyVarTy boxedTypeKind                `thenNF_Tc` \ t_tv ->
744         unifyTauTy ((mkTyConApp ioTyCon [t_tv]))
745                    (idType main_mono_id)
746     )                                           `thenTc_`
747
748         -- Now check the signatures
749         -- Must do this after the unification with IO t, 
750         -- in case of a silly signature like
751         --      main :: forall a. a
752         -- The unification to IO t will bind the type variable 'a',
753         -- which is just waht check_one_sig looks for
754     mapTc check_one_sig sigs                    `thenTc_`
755     mapTc check_main_ctxt sigs                  `thenTc_` 
756
757             returnTc (Just ([], emptyLIE))
758
759   | not (null sigs)
760   = mapTc check_one_sig sigs                    `thenTc_`
761     mapTc check_one_ctxt all_sigs_but_first     `thenTc_`
762     returnTc (Just (theta1, sig_lie))
763
764   | otherwise
765   = returnTc Nothing            -- No constraints from type sigs
766
767   where
768     (TySigInfo _ id1 _ theta1 _ _ _ _ : all_sigs_but_first) = sigs
769
770     sig1_dict_tys       = mk_dict_tys theta1
771     n_sig1_dict_tys     = length sig1_dict_tys
772     sig_lie             = mkLIE (concat [insts | TySigInfo _ _ _ _ _ _ insts _ <- sigs])
773
774     maybe_main        = find_main top_lvl binder_names mono_ids
775     main_bound_here   = maybeToBool maybe_main
776     Just main_mono_id = maybe_main
777                       
778         -- CHECK THAT THE SIGNATURE TYVARS AND TAU_TYPES ARE OK
779         -- Doesn't affect substitution
780     check_one_sig (TySigInfo _ id sig_tyvars sig_theta sig_tau _ _ src_loc)
781       = tcAddSrcLoc src_loc                                     $
782         tcAddErrCtxtM (sigCtxt (sig_msg id) sig_tyvars sig_theta sig_tau)       $
783         checkSigTyVars sig_tyvars (idFreeTyVars id)
784
785
786         -- CHECK THAT ALL THE SIGNATURE CONTEXTS ARE UNIFIABLE
787         -- The type signatures on a mutually-recursive group of definitions
788         -- must all have the same context (or none).
789         --
790         -- We unify them because, with polymorphic recursion, their types
791         -- might not otherwise be related.  This is a rather subtle issue.
792         -- ToDo: amplify
793     check_one_ctxt sig@(TySigInfo _ id _ theta _ _ _ src_loc)
794        = tcAddSrcLoc src_loc    $
795          tcAddErrCtxt (sigContextsCtxt id1 id) $
796          checkTc (length this_sig_dict_tys == n_sig1_dict_tys)
797                                 sigContextsErr          `thenTc_`
798          unifyTauTyLists sig1_dict_tys this_sig_dict_tys
799       where
800          this_sig_dict_tys = mk_dict_tys theta
801
802         -- CHECK THAT FOR A GROUP INVOLVING Main.main, all 
803         -- the signature contexts are empty (what a bore)
804     check_main_ctxt sig@(TySigInfo _ id _ theta _ _ _ src_loc)
805         = tcAddSrcLoc src_loc   $
806           checkTc (null theta) (mainContextsErr id)
807
808     mk_dict_tys theta = map mkPredTy theta
809
810     sig_msg id = ptext SLIT("When checking the type signature for") <+> quotes (ppr id)
811
812         -- Search for Main.main in the binder_names, return corresponding mono_id
813     find_main NotTopLevel binder_names mono_ids = Nothing
814     find_main TopLevel    binder_names mono_ids = go binder_names mono_ids
815     go [] [] = Nothing
816     go (n:ns) (m:ms) | n `hasKey` mainKey = Just m
817                      | otherwise          = go ns ms
818 \end{code}
819
820
821 %************************************************************************
822 %*                                                                      *
823 \subsection{SPECIALIZE pragmas}
824 %*                                                                      *
825 %************************************************************************
826
827 @tcSpecSigs@ munches up the specialisation "signatures" that arise through *user*
828 pragmas.  It is convenient for them to appear in the @[RenamedSig]@
829 part of a binding because then the same machinery can be used for
830 moving them into place as is done for type signatures.
831
832 They look like this:
833
834 \begin{verbatim}
835         f :: Ord a => [a] -> b -> b
836         {-# SPECIALIZE f :: [Int] -> b -> b #-}
837 \end{verbatim}
838
839 For this we generate:
840 \begin{verbatim}
841         f* = /\ b -> let d1 = ...
842                      in f Int b d1
843 \end{verbatim}
844
845 where f* is a SpecPragmaId.  The **sole** purpose of SpecPragmaIds is to
846 retain a right-hand-side that the simplifier will otherwise discard as
847 dead code... the simplifier has a flag that tells it not to discard
848 SpecPragmaId bindings.
849
850 In this case the f* retains a call-instance of the overloaded
851 function, f, (including appropriate dictionaries) so that the
852 specialiser will subsequently discover that there's a call of @f@ at
853 Int, and will create a specialisation for @f@.  After that, the
854 binding for @f*@ can be discarded.
855
856 We used to have a form
857         {-# SPECIALISE f :: <type> = g #-}
858 which promised that g implemented f at <type>, but we do that with 
859 a RULE now:
860         {-# SPECIALISE (f::<type) = g #-}
861
862 \begin{code}
863 tcSpecSigs :: [RenamedSig] -> TcM s (TcMonoBinds, LIE)
864 tcSpecSigs (SpecSig name poly_ty src_loc : sigs)
865   =     -- SPECIALISE f :: forall b. theta => tau  =  g
866     tcAddSrcLoc src_loc                         $
867     tcAddErrCtxt (valSpecSigCtxt name poly_ty)  $
868
869         -- Get and instantiate its alleged specialised type
870     tcHsSigType poly_ty                         `thenTc` \ sig_ty ->
871
872         -- Check that f has a more general type, and build a RHS for
873         -- the spec-pragma-id at the same time
874     tcExpr (HsVar name) sig_ty                  `thenTc` \ (spec_expr, spec_lie) ->
875
876         -- Squeeze out any Methods (see comments with tcSimplifyToDicts)
877     tcSimplifyToDicts spec_lie                  `thenTc` \ (spec_lie1, spec_binds) ->
878
879         -- Just specialise "f" by building a SpecPragmaId binding
880         -- It is the thing that makes sure we don't prematurely 
881         -- dead-code-eliminate the binding we are really interested in.
882     newSpecPragmaId name sig_ty         `thenNF_Tc` \ spec_id ->
883
884         -- Do the rest and combine
885     tcSpecSigs sigs                     `thenTc` \ (binds_rest, lie_rest) ->
886     returnTc (binds_rest `andMonoBinds` VarMonoBind spec_id (mkHsLet spec_binds spec_expr),
887               lie_rest   `plusLIE`      spec_lie1)
888
889 tcSpecSigs (other_sig : sigs) = tcSpecSigs sigs
890 tcSpecSigs []                 = returnTc (EmptyMonoBinds, emptyLIE)
891 \end{code}
892
893
894 %************************************************************************
895 %*                                                                      *
896 \subsection[TcBinds-errors]{Error contexts and messages}
897 %*                                                                      *
898 %************************************************************************
899
900
901 \begin{code}
902 patMonoBindsCtxt bind
903   = hang (ptext SLIT("In a pattern binding:")) 4 (ppr bind)
904
905 -----------------------------------------------
906 valSpecSigCtxt v ty
907   = sep [ptext SLIT("In a SPECIALIZE pragma for a value:"),
908          nest 4 (ppr v <+> dcolon <+> ppr ty)]
909
910 -----------------------------------------------
911 notAsPolyAsSigErr sig_tau mono_tyvars
912   = hang (ptext SLIT("A type signature is more polymorphic than the inferred type"))
913         4  (vcat [text "Can't for-all the type variable(s)" <+> 
914                   pprQuotedList mono_tyvars,
915                   text "in the type" <+> quotes (ppr sig_tau)
916            ])
917
918 -----------------------------------------------
919 badMatchErr sig_ty inferred_ty
920   = hang (ptext SLIT("Type signature doesn't match inferred type"))
921          4 (vcat [hang (ptext SLIT("Signature:")) 4 (ppr sig_ty),
922                       hang (ptext SLIT("Inferred :")) 4 (ppr inferred_ty)
923            ])
924
925 -----------------------------------------------
926 unboxedPatBindErr id
927   = ptext SLIT("variable in a lazy pattern binding has unboxed type: ")
928          <+> quotes (ppr id)
929
930 -----------------------------------------------
931 bindSigsCtxt ids
932   = ptext SLIT("When checking the type signature(s) for") <+> pprQuotedList ids
933
934 -----------------------------------------------
935 sigContextsErr
936   = ptext SLIT("Mismatched contexts")
937
938 sigContextsCtxt s1 s2
939   = hang (hsep [ptext SLIT("When matching the contexts of the signatures for"), 
940                 quotes (ppr s1), ptext SLIT("and"), quotes (ppr s2)])
941          4 (ptext SLIT("(the signature contexts in a mutually recursive group should all be identical)"))
942
943 mainContextsErr id
944   | id `hasKey` mainKey = ptext SLIT("Main.main cannot be overloaded")
945   | otherwise
946   = quotes (ppr id) <+> ptext SLIT("cannot be overloaded") <> char ',' <> -- sigh; workaround for cpp's inability to deal
947     ptext SLIT("because it is mutually recursive with Main.main")         -- with commas inside SLIT strings.
948
949 mainTyCheckCtxt
950   = hsep [ptext SLIT("When checking that"), quotes (ptext SLIT("main")),
951           ptext SLIT("has the required type")]
952
953 -----------------------------------------------
954 unliftedBindErr flavour mbind
955   = hang (text flavour <+> ptext SLIT("bindings for unlifted types aren't allowed"))
956          4 (ppr mbind)
957
958 existentialExplode mbinds
959   = hang (vcat [text "My brain just exploded.",
960                 text "I can't handle pattern bindings for existentially-quantified constructors.",
961                 text "In the binding group"])
962         4 (ppr mbinds)
963 \end{code}