[project @ 2000-05-25 12:41:14 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, 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         -- pprTrace "gTVTG" (ppr (lie, body_tyvars, extended_tyvars)) $
558         returnNF_Tc (emptyVarSet, extended_tyvars)
559     else
560         -- This recover and discard-errs is to avoid duplicate error
561         -- messages; this, after all, is an "extra" call to tcSimplify
562         recoverNF_Tc (returnNF_Tc (emptyVarSet, body_tyvars))           $
563         discardErrsTc                                                   $
564
565         tcSimplify (text "getTVG") body_tyvars lie    `thenTc` \ (_, _, constrained_dicts) ->
566         let
567           -- ASSERT: dicts_sig is already zonked!
568             constrained_tyvars    = foldrBag (unionVarSet . tyVarsOfInst) emptyVarSet constrained_dicts
569             reduced_tyvars_to_gen = body_tyvars `minusVarSet` constrained_tyvars
570         in
571         returnTc (constrained_tyvars, reduced_tyvars_to_gen)
572 \end{code}
573
574
575 \begin{code}
576 isUnRestrictedGroup :: [Name]           -- Signatures given for these
577                     -> RenamedMonoBinds
578                     -> Bool
579
580 is_elem v vs = isIn "isUnResMono" v vs
581
582 isUnRestrictedGroup sigs (PatMonoBind other        _ _) = False
583 isUnRestrictedGroup sigs (VarMonoBind v _)              = v `is_elem` sigs
584 isUnRestrictedGroup sigs (FunMonoBind v _ matches _)    = any isUnRestrictedMatch matches || 
585                                                           v `is_elem` sigs
586 isUnRestrictedGroup sigs (AndMonoBinds mb1 mb2)         = isUnRestrictedGroup sigs mb1 &&
587                                                           isUnRestrictedGroup sigs mb2
588 isUnRestrictedGroup sigs EmptyMonoBinds                 = True
589
590 isUnRestrictedMatch (Match _ [] Nothing _) = False      -- No args, no signature
591 isUnRestrictedMatch other                  = True       -- Some args or a signature
592 \end{code}
593
594
595 %************************************************************************
596 %*                                                                      *
597 \subsection{tcMonoBind}
598 %*                                                                      *
599 %************************************************************************
600
601 @tcMonoBinds@ deals with a single @MonoBind@.  
602 The signatures have been dealt with already.
603
604 \begin{code}
605 tcMonoBinds :: RenamedMonoBinds 
606             -> [TcSigInfo]
607             -> RecFlag
608             -> TcM s (TcMonoBinds, 
609                       LIE,              -- LIE required
610                       [Name],           -- Bound names
611                       [TcId])   -- Corresponding monomorphic bound things
612
613 tcMonoBinds mbinds tc_ty_sigs is_rec
614   = tc_mb_pats mbinds           `thenTc` \ (complete_it, lie_req_pat, tvs, ids, lie_avail) ->
615     let
616         tv_list           = bagToList tvs
617         id_list           = bagToList ids
618         (names, mono_ids) = unzip id_list
619
620                 -- This last defn is the key one:
621                 -- extend the val envt with bindings for the 
622                 -- things bound in this group, overriding the monomorphic
623                 -- ids with the polymorphic ones from the pattern
624         extra_val_env = case is_rec of
625                           Recursive    -> map mk_bind id_list
626                           NonRecursive -> []
627     in
628         -- Don't know how to deal with pattern-bound existentials yet
629     checkTc (isEmptyBag tvs && isEmptyBag lie_avail) 
630             (existentialExplode mbinds)                 `thenTc_` 
631
632         -- *Before* checking the RHSs, but *after* checking *all* the patterns,
633         -- extend the envt with bindings for all the bound ids;
634         --   and *then* override with the polymorphic Ids from the signatures
635         -- That is the whole point of the "complete_it" stuff.
636         --
637         -- There's a further wrinkle: we have to delay extending the environment
638         -- until after we've dealt with any pattern-bound signature type variables
639         -- Consider  f (x::a) = ...f...
640         -- We're going to check that a isn't unified with anything in the envt, 
641         -- so f itself had better not be!  So we pass the envt binding f into
642         -- complete_it, which extends the actual envt in TcMatches.tcMatch, after
643         -- dealing with the signature tyvars
644
645     complete_it extra_val_env                           `thenTc` \ (mbinds', lie_req_rhss) ->
646
647     returnTc (mbinds', lie_req_pat `plusLIE` lie_req_rhss, names, mono_ids)
648   where
649
650         -- This function is used when dealing with a LHS binder; we make a monomorphic
651         -- version of the Id.  We check for type signatures
652     tc_pat_bndr name pat_ty
653         = case maybeSig tc_ty_sigs name of
654             Nothing
655                 -> newLocalId (getOccName name) pat_ty (getSrcLoc name)
656
657             Just (TySigInfo _ _ _ _ _ mono_id _ _)
658                 -> tcAddSrcLoc (getSrcLoc name)                         $
659                    unifyTauTy (idType mono_id) pat_ty   `thenTc_`
660                    returnTc mono_id
661
662     mk_bind (name, mono_id) = case maybeSig tc_ty_sigs name of
663                                 Nothing                                   -> (name, mono_id)
664                                 Just (TySigInfo name poly_id _ _ _ _ _ _) -> (name, poly_id)
665
666     tc_mb_pats EmptyMonoBinds
667       = returnTc (\ xve -> returnTc (EmptyMonoBinds, emptyLIE), emptyLIE, emptyBag, emptyBag, emptyLIE)
668
669     tc_mb_pats (AndMonoBinds mb1 mb2)
670       = tc_mb_pats mb1          `thenTc` \ (complete_it1, lie_req1, tvs1, ids1, lie_avail1) ->
671         tc_mb_pats mb2          `thenTc` \ (complete_it2, lie_req2, tvs2, ids2, lie_avail2) ->
672         let
673            complete_it xve = complete_it1 xve   `thenTc` \ (mb1', lie1) ->
674                              complete_it2 xve   `thenTc` \ (mb2', lie2) ->
675                              returnTc (AndMonoBinds mb1' mb2', lie1 `plusLIE` lie2)
676         in
677         returnTc (complete_it,
678                   lie_req1 `plusLIE` lie_req2,
679                   tvs1 `unionBags` tvs2,
680                   ids1 `unionBags` ids2,
681                   lie_avail1 `plusLIE` lie_avail2)
682
683     tc_mb_pats (FunMonoBind name inf matches locn)
684       = new_lhs_ty                      `thenNF_Tc` \ bndr_ty ->
685         tc_pat_bndr name bndr_ty        `thenTc` \ bndr_id ->
686         let
687            complete_it xve = tcAddSrcLoc locn                           $
688                              tcMatchesFun xve name bndr_ty  matches     `thenTc` \ (matches', lie) ->
689                              returnTc (FunMonoBind bndr_id inf matches' locn, lie)
690         in
691         returnTc (complete_it, emptyLIE, emptyBag, unitBag (name, bndr_id), emptyLIE)
692
693     tc_mb_pats bind@(PatMonoBind pat grhss locn)
694       = tcAddSrcLoc locn                $
695         new_lhs_ty                      `thenNF_Tc` \ pat_ty -> 
696
697                 --      Now typecheck the pattern
698                 -- We don't support binding fresh type variables in the
699                 -- pattern of a pattern binding.  For example, this is illegal:
700                 --      (x::a, y::b) = e
701                 -- whereas this is ok
702                 --      (x::Int, y::Bool) = e
703                 --
704                 -- We don't check explicitly for this problem.  Instead, we simply
705                 -- type check the pattern with tcPat.  If the pattern mentions any
706                 -- fresh tyvars we simply get an out-of-scope type variable error
707         tcPat tc_pat_bndr pat pat_ty            `thenTc` \ (pat', lie_req, tvs, ids, lie_avail) ->
708         let
709            complete_it xve = tcAddSrcLoc locn                           $
710                              tcAddErrCtxt (patMonoBindsCtxt bind)       $
711                              tcExtendLocalValEnv xve                    $
712                              tcGRHSs grhss pat_ty PatBindRhs            `thenTc` \ (grhss', lie) ->
713                              returnTc (PatMonoBind pat' grhss' locn, lie)
714         in
715         returnTc (complete_it, lie_req, tvs, ids, lie_avail)
716
717         -- Figure out the appropriate kind for the pattern,
718         -- and generate a suitable type variable 
719     new_lhs_ty = case is_rec of
720                      Recursive    -> newTyVarTy boxedTypeKind   -- Recursive, so no unboxed types
721                      NonRecursive -> newTyVarTy_OpenKind        -- Non-recursive, so we permit unboxed types
722 \end{code}
723
724 %************************************************************************
725 %*                                                                      *
726 \subsection{Signatures}
727 %*                                                                      *
728 %************************************************************************
729
730 @checkSigMatch@ does the next step in checking signature matching.
731 The tau-type part has already been unified.  What we do here is to
732 check that this unification has not over-constrained the (polymorphic)
733 type variables of the original signature type.
734
735 The error message here is somewhat unsatisfactory, but it'll do for
736 now (ToDo).
737
738 \begin{code}
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 [inst | TySigInfo _ _ _ _ _ _ inst _ <- 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}