[project @ 2001-02-26 15:06:57 by simonmar]
[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, tcTopBinds,
8                  tcSpecSigs, tcBindWithSigs ) where
9
10 #include "HsVersions.h"
11
12 import {-# SOURCE #-} TcMatches ( tcGRHSs, tcMatchesFun )
13 import {-# SOURCE #-} TcExpr  ( tcExpr )
14
15 import CmdLineOpts      ( opt_NoMonomorphismRestriction )
16 import HsSyn            ( HsExpr(..), HsBinds(..), MonoBinds(..), Sig(..), 
17                           Match(..), HsMatchContext(..), 
18                           collectMonoBinders, andMonoBinds
19                         )
20 import RnHsSyn          ( RenamedHsBinds, RenamedSig, RenamedMonoBinds )
21 import TcHsSyn          ( TcMonoBinds, TcId, zonkId, mkHsLet )
22
23 import TcMonad
24 import Inst             ( LIE, emptyLIE, mkLIE, plusLIE, InstOrigin(..),
25                           newDicts, instToId
26                         )
27 import TcEnv            ( tcExtendLocalValEnv,
28                           newSpecPragmaId, newLocalId
29                         )
30 import TcSimplify       ( tcSimplifyInfer, tcSimplifyInferCheck, tcSimplifyCheck, tcSimplifyToDicts )
31 import TcMonoType       ( tcHsSigType, checkSigTyVars,
32                           TcSigInfo(..), tcTySig, maybeSig, sigCtxt
33                         )
34 import TcPat            ( tcPat )
35 import TcSimplify       ( bindInstsOfLocalFuns )
36 import TcType           ( newTyVarTy, newTyVar, 
37                           zonkTcTyVarToTyVar
38                         )
39 import TcUnify          ( unifyTauTy, unifyTauTyLists )
40
41 import CoreFVs          ( idFreeTyVars )
42 import Id               ( mkVanillaId, setInlinePragma )
43 import Var              ( idType, idName )
44 import IdInfo           ( InlinePragInfo(..) )
45 import Name             ( Name, getOccName, getSrcLoc )
46 import NameSet
47 import Type             ( mkTyVarTy, tyVarsOfTypes,
48                           mkForAllTys, mkFunTys, tyVarsOfType, 
49                           mkPredTy, mkForAllTy, isUnLiftedType, 
50                           unliftedTypeKind, liftedTypeKind, openTypeKind
51                         )
52 import Var              ( tyVarKind )
53 import VarSet
54 import Bag
55 import Util             ( isIn )
56 import ListSetOps       ( minusList )
57 import Maybes           ( maybeToBool )
58 import BasicTypes       ( TopLevelFlag(..), RecFlag(..), isNonRec, isNotTopLevel )
59 import FiniteMap        ( listToFM, lookupFM )
60 import Outputable
61 \end{code}
62
63
64 %************************************************************************
65 %*                                                                      *
66 \subsection{Type-checking bindings}
67 %*                                                                      *
68 %************************************************************************
69
70 @tcBindsAndThen@ typechecks a @HsBinds@.  The "and then" part is because
71 it needs to know something about the {\em usage} of the things bound,
72 so that it can create specialisations of them.  So @tcBindsAndThen@
73 takes a function which, given an extended environment, E, typechecks
74 the scope of the bindings returning a typechecked thing and (most
75 important) an LIE.  It is this LIE which is then used as the basis for
76 specialising the things bound.
77
78 @tcBindsAndThen@ also takes a "combiner" which glues together the
79 bindings and the "thing" to make a new "thing".
80
81 The real work is done by @tcBindWithSigsAndThen@.
82
83 Recursive and non-recursive binds are handled in essentially the same
84 way: because of uniques there are no scoping issues left.  The only
85 difference is that non-recursive bindings can bind primitive values.
86
87 Even for non-recursive binding groups we add typings for each binder
88 to the LVE for the following reason.  When each individual binding is
89 checked the type of its LHS is unified with that of its RHS; and
90 type-checking the LHS of course requires that the binder is in scope.
91
92 At the top-level the LIE is sure to contain nothing but constant
93 dictionaries, which we resolve at the module level.
94
95 \begin{code}
96 tcTopBinds :: RenamedHsBinds -> TcM ((TcMonoBinds, TcEnv), LIE)
97 tcTopBinds binds
98   = tc_binds_and_then TopLevel glue binds       $
99     tcGetEnv                                    `thenNF_Tc` \ env ->
100     returnTc ((EmptyMonoBinds, env), emptyLIE)
101   where
102     glue is_rec binds1 (binds2, thing) = (binds1 `AndMonoBinds` binds2, thing)
103
104
105 tcBindsAndThen
106         :: (RecFlag -> TcMonoBinds -> thing -> thing)           -- Combinator
107         -> RenamedHsBinds
108         -> TcM (thing, LIE)
109         -> TcM (thing, LIE)
110
111 tcBindsAndThen = tc_binds_and_then NotTopLevel
112
113 tc_binds_and_then top_lvl combiner EmptyBinds do_next
114   = do_next
115 tc_binds_and_then top_lvl combiner (MonoBind EmptyMonoBinds sigs is_rec) do_next
116   = do_next
117
118 tc_binds_and_then top_lvl combiner (ThenBinds b1 b2) do_next
119   = tc_binds_and_then top_lvl combiner b1       $
120     tc_binds_and_then top_lvl combiner b2       $
121     do_next
122
123 tc_binds_and_then top_lvl combiner (MonoBind bind sigs is_rec) do_next
124   =     -- TYPECHECK THE SIGNATURES
125       mapTc tcTySig [sig | sig@(Sig name _ _) <- sigs]  `thenTc` \ tc_ty_sigs ->
126   
127       tcBindWithSigs top_lvl bind tc_ty_sigs
128                      sigs is_rec                        `thenTc` \ (poly_binds, poly_lie, poly_ids) ->
129   
130           -- Extend the environment to bind the new polymorphic Ids
131       tcExtendLocalValEnv [(idName poly_id, poly_id) | poly_id <- poly_ids] $
132   
133           -- Build bindings and IdInfos corresponding to user pragmas
134       tcSpecSigs sigs           `thenTc` \ (prag_binds, prag_lie) ->
135
136         -- Now do whatever happens next, in the augmented envt
137       do_next                   `thenTc` \ (thing, thing_lie) ->
138
139         -- Create specialisations of functions bound here
140         -- We want to keep non-recursive things non-recursive
141         -- so that we desugar unlifted bindings correctly
142       case (top_lvl, is_rec) of
143
144                 -- For the top level don't bother will all this bindInstsOfLocalFuns stuff
145                 -- All the top level things are rec'd together anyway, so it's fine to
146                 -- leave them to the tcSimplifyTop, and quite a bit faster too
147         (TopLevel, _)
148                 -> returnTc (combiner Recursive (poly_binds `andMonoBinds` prag_binds) thing,
149                              thing_lie `plusLIE` prag_lie `plusLIE` poly_lie)
150
151         (NotTopLevel, NonRecursive) 
152                 -> bindInstsOfLocalFuns 
153                                 (thing_lie `plusLIE` prag_lie)
154                                 poly_ids                        `thenTc` \ (thing_lie', lie_binds) ->
155
156                    returnTc (
157                         combiner NonRecursive poly_binds $
158                         combiner NonRecursive prag_binds $
159                         combiner Recursive lie_binds  $
160                                 -- NB: the binds returned by tcSimplify and bindInstsOfLocalFuns
161                                 -- aren't guaranteed in dependency order (though we could change
162                                 -- that); hence the Recursive marker.
163                         thing,
164
165                         thing_lie' `plusLIE` poly_lie
166                    )
167
168         (NotTopLevel, Recursive)
169                 -> bindInstsOfLocalFuns 
170                                 (thing_lie `plusLIE` poly_lie `plusLIE` prag_lie) 
171                                 poly_ids                        `thenTc` \ (final_lie, lie_binds) ->
172
173                    returnTc (
174                         combiner Recursive (
175                                 poly_binds `andMonoBinds`
176                                 lie_binds  `andMonoBinds`
177                                 prag_binds) thing,
178                         final_lie
179                    )
180 \end{code}
181
182
183 %************************************************************************
184 %*                                                                      *
185 \subsection{tcBindWithSigs}
186 %*                                                                      *
187 %************************************************************************
188
189 @tcBindWithSigs@ deals with a single binding group.  It does generalisation,
190 so all the clever stuff is in here.
191
192 * binder_names and mbind must define the same set of Names
193
194 * The Names in tc_ty_sigs must be a subset of binder_names
195
196 * The Ids in tc_ty_sigs don't necessarily have to have the same name
197   as the Name in the tc_ty_sig
198
199 \begin{code}
200 tcBindWithSigs  
201         :: TopLevelFlag
202         -> RenamedMonoBinds
203         -> [TcSigInfo]
204         -> [RenamedSig]         -- Used solely to get INLINE, NOINLINE sigs
205         -> RecFlag
206         -> TcM (TcMonoBinds, LIE, [TcId])
207
208 tcBindWithSigs top_lvl mbind tc_ty_sigs inline_sigs is_rec
209   = recoverTc (
210         -- If typechecking the binds fails, then return with each
211         -- signature-less binder given type (forall a.a), to minimise subsequent
212         -- error messages
213         newTyVar liftedTypeKind         `thenNF_Tc` \ alpha_tv ->
214         let
215           forall_a_a    = mkForAllTy alpha_tv (mkTyVarTy alpha_tv)
216           binder_names  = collectMonoBinders mbind
217           poly_ids      = map mk_dummy binder_names
218           mk_dummy name = case maybeSig tc_ty_sigs name of
219                             Just (TySigInfo _ poly_id _ _ _ _ _ _) -> poly_id   -- Signature
220                             Nothing -> mkVanillaId name forall_a_a              -- No signature
221         in
222         returnTc (EmptyMonoBinds, emptyLIE, poly_ids)
223     )                                           $
224
225         -- TYPECHECK THE BINDINGS
226     tcMonoBinds mbind tc_ty_sigs is_rec         `thenTc` \ (mbind', lie_req, binder_names, mono_ids) ->
227     let
228         tau_tvs = varSetElems (foldr (unionVarSet . tyVarsOfType . idType) emptyVarSet mono_ids)
229     in
230
231         -- GENERALISE
232     generalise binder_names mbind tau_tvs lie_req tc_ty_sigs
233                                 `thenTc` \ (tc_tyvars_to_gen, lie_free, dict_binds, dict_ids) ->
234
235
236         -- ZONK THE GENERALISED TYPE VARIABLES TO REAL TyVars
237         -- This commits any unbound kind variables to boxed kind, by unification
238         -- It's important that the final quanfified type variables
239         -- are fully zonked, *including boxity*, because they'll be 
240         -- included in the forall types of the polymorphic Ids.
241         -- At calls of these Ids we'll instantiate fresh type variables from
242         -- them, and we use their boxity then.
243     mapNF_Tc zonkTcTyVarToTyVar tc_tyvars_to_gen        `thenNF_Tc` \ real_tyvars_to_gen ->
244
245         -- ZONK THE Ids
246         -- It's important that the dict Ids are zonked, including the boxity set
247         -- in the previous step, because they are later used to form the type of 
248         -- the polymorphic thing, and forall-types must be zonked so far as 
249         -- their bound variables are concerned
250     mapNF_Tc zonkId dict_ids                            `thenNF_Tc` \ zonked_dict_ids ->
251     mapNF_Tc zonkId mono_ids                            `thenNF_Tc` \ zonked_mono_ids ->
252
253         -- CHECK FOR BOGUS UNLIFTED BINDINGS
254     checkUnliftedBinds top_lvl is_rec real_tyvars_to_gen mbind zonked_mono_ids  `thenTc_`
255
256         -- BUILD THE POLYMORPHIC RESULT IDs
257     let
258         exports  = zipWith mk_export binder_names zonked_mono_ids
259         dict_tys = map idType zonked_dict_ids
260
261         inlines    = mkNameSet [name | InlineSig name _ loc <- inline_sigs]
262         no_inlines = listToFM ([(name, IMustNotBeINLINEd False phase) | NoInlineSig name phase loc <- inline_sigs] ++
263                                [(name, IMustNotBeINLINEd True  phase) | InlineSig   name phase loc <- inline_sigs, maybeToBool phase])
264                 -- "INLINE n foo" means inline foo, but not until at least phase n
265                 -- "NOINLINE n foo" means don't inline foo until at least phase n, and even 
266                 --                  then only if it is small enough etc.
267                 -- "NOINLINE foo" means don't inline foo ever, which we signal with a (IMustNotBeINLINEd Nothing)
268                 -- See comments in CoreUnfold.blackListed for the Authorised Version
269
270         mk_export binder_name zonked_mono_id
271           = (tyvars, 
272              attachNoInlinePrag no_inlines poly_id,
273              zonked_mono_id)
274           where
275             (tyvars, poly_id) = 
276                 case maybeSig tc_ty_sigs binder_name of
277                   Just (TySigInfo _ sig_poly_id sig_tyvars _ _ _ _ _) -> 
278                         (sig_tyvars, sig_poly_id)
279                   Nothing -> (real_tyvars_to_gen, new_poly_id)
280
281             new_poly_id = mkVanillaId binder_name poly_ty
282             poly_ty = mkForAllTys real_tyvars_to_gen
283                         $ mkFunTys dict_tys 
284                         $ idType zonked_mono_id
285                 -- It's important to build a fully-zonked poly_ty, because
286                 -- we'll slurp out its free type variables when extending the
287                 -- local environment (tcExtendLocalValEnv); if it's not zonked
288                 -- it appears to have free tyvars that aren't actually free 
289                 -- at all.
290     in
291
292          -- BUILD RESULTS
293     returnTc (
294         -- pprTrace "binding.." (ppr ((zonked_dict_ids, dict_binds), 
295         --                              exports, [idType poly_id | (_, poly_id, _) <- exports])) $
296         AbsBinds real_tyvars_to_gen
297                  zonked_dict_ids
298                  exports
299                  inlines
300                  (dict_binds `andMonoBinds` mbind'),
301         lie_free,
302         [poly_id | (_, poly_id, _) <- exports]
303     )
304
305 attachNoInlinePrag no_inlines bndr
306   = case lookupFM no_inlines (idName bndr) of
307         Just prag -> bndr `setInlinePragma` prag
308         Nothing   -> bndr
309
310 checkUnliftedBinds top_lvl is_rec real_tyvars_to_gen mbind zonked_mono_ids
311   = ASSERT( not (any ((== unliftedTypeKind) . tyVarKind) real_tyvars_to_gen) )
312                 -- The instCantBeGeneralised stuff in tcSimplify should have
313                 -- already raised an error if we're trying to generalise an 
314                 -- unboxed tyvar (NB: unboxed tyvars are always introduced 
315                 -- along with a class constraint) and it's better done there 
316                 -- because we have more precise origin information.
317                 -- That's why we just use an ASSERT here.
318
319         -- Check that pattern-bound variables are not unlifted
320     (if or [ (idName id `elem` pat_binders) && isUnLiftedType (idType id) 
321            | id <- zonked_mono_ids ] then
322         addErrTc (unliftedBindErr "Pattern" mbind)
323      else
324         returnTc ()
325     )                                                           `thenTc_`
326
327         -- Unlifted bindings must be non-recursive,
328         -- not top level, non-polymorphic, and not pattern bound
329     if any (isUnLiftedType . idType) zonked_mono_ids then
330         checkTc (isNotTopLevel top_lvl)
331                 (unliftedBindErr "Top-level" mbind)             `thenTc_`
332         checkTc (isNonRec is_rec)
333                 (unliftedBindErr "Recursive" mbind)             `thenTc_`
334         checkTc (null real_tyvars_to_gen)
335                 (unliftedBindErr "Polymorphic" mbind)
336      else
337         returnTc ()
338
339   where
340     pat_binders :: [Name]
341     pat_binders = collectMonoBinders (justPatBindings mbind EmptyMonoBinds)
342
343     justPatBindings bind@(PatMonoBind _ _ _) binds = bind `andMonoBinds` binds
344     justPatBindings (AndMonoBinds b1 b2) binds = 
345             justPatBindings b1 (justPatBindings b2 binds) 
346     justPatBindings other_bind binds = binds
347 \end{code}
348
349
350 Polymorphic recursion
351 ~~~~~~~~~~~~~~~~~~~~~
352 The game plan for polymorphic recursion in the code above is 
353
354         * Bind any variable for which we have a type signature
355           to an Id with a polymorphic type.  Then when type-checking 
356           the RHSs we'll make a full polymorphic call.
357
358 This fine, but if you aren't a bit careful you end up with a horrendous
359 amount of partial application and (worse) a huge space leak. For example:
360
361         f :: Eq a => [a] -> [a]
362         f xs = ...f...
363
364 If we don't take care, after typechecking we get
365
366         f = /\a -> \d::Eq a -> let f' = f a d
367                                in
368                                \ys:[a] -> ...f'...
369
370 Notice the the stupid construction of (f a d), which is of course
371 identical to the function we're executing.  In this case, the
372 polymorphic recursion isn't being used (but that's a very common case).
373 We'd prefer
374
375         f = /\a -> \d::Eq a -> letrec
376                                  fm = \ys:[a] -> ...fm...
377                                in
378                                fm
379
380 This can lead to a massive space leak, from the following top-level defn
381 (post-typechecking)
382
383         ff :: [Int] -> [Int]
384         ff = f Int dEqInt
385
386 Now (f dEqInt) evaluates to a lambda that has f' as a free variable; but
387 f' is another thunk which evaluates to the same thing... and you end
388 up with a chain of identical values all hung onto by the CAF ff.
389
390         ff = f Int dEqInt
391
392            = let f' = f Int dEqInt in \ys. ...f'...
393
394            = let f' = let f' = f Int dEqInt in \ys. ...f'...
395                       in \ys. ...f'...
396
397 Etc.
398 Solution: when typechecking the RHSs we always have in hand the
399 *monomorphic* Ids for each binding.  So we just need to make sure that
400 if (Method f a d) shows up in the constraints emerging from (...f...)
401 we just use the monomorphic Id.  We achieve this by adding monomorphic Ids
402 to the "givens" when simplifying constraints.  That's what the "lies_avail"
403 is doing.
404
405
406 %************************************************************************
407 %*                                                                      *
408 \subsection{getTyVarsToGen}
409 %*                                                                      *
410 %************************************************************************
411
412 \begin{code}
413 generalise_help doc tau_tvs lie_req sigs
414
415 -----------------------
416   | null sigs
417   =     -- INFERENCE CASE: Unrestricted group, no type signatures
418     tcSimplifyInfer doc
419                     tau_tvs lie_req
420
421 -----------------------
422   | otherwise
423   =     -- CHECKING CASE: Unrestricted group, there are type signatures
424         -- Check signature contexts are empty 
425     checkSigsCtxts sigs                         `thenTc` \ (sig_avails, sig_dicts) ->
426
427         -- Check that the needed dicts can be
428         -- expressed in terms of the signature ones
429     tcSimplifyInferCheck doc tau_tvs sig_avails lie_req `thenTc` \ (forall_tvs, lie_free, dict_binds) ->
430         
431         -- Check that signature type variables are OK
432     checkSigsTyVars sigs                                        `thenTc_`
433
434     returnTc (forall_tvs, lie_free, dict_binds, sig_dicts)
435
436 generalise binder_names mbind tau_tvs lie_req sigs
437   | is_unrestricted     -- UNRESTRICTED CASE
438   = generalise_help doc tau_tvs lie_req sigs
439
440   | otherwise           -- RESTRICTED CASE
441   =     -- Do a simplification to decide what type variables
442         -- are constrained.  We can't just take the free vars
443         -- of lie_req because that'll have methods that may
444         -- incidentally mention entirely unconstrained variables
445         --      e.g. a call to  f :: Eq a => a -> b -> b
446         -- Here, b is unconstrained.  A good example would be
447         --      foo = f (3::Int)
448         -- We want to infer the polymorphic type
449         --      foo :: forall b. b -> b
450     generalise_help doc tau_tvs lie_req sigs    `thenTc` \ (forall_tvs, lie_free, dict_binds, dict_ids) ->
451
452         -- Check signature contexts are empty 
453     checkTc (null sigs || null dict_ids)
454             (restrictedBindCtxtErr binder_names)        `thenTc_`
455
456         -- Identify constrained tyvars
457     let
458         constrained_tvs = varSetElems (tyVarsOfTypes (map idType dict_ids))
459                                 -- The dict_ids are fully zonked
460         final_forall_tvs = forall_tvs `minusList` constrained_tvs
461     in
462
463         -- Now simplify with exactly that set of tyvars
464         -- We have to squash those Methods
465     tcSimplifyCheck doc final_forall_tvs [] lie_req     `thenTc` \ (lie_free, binds) ->
466
467     returnTc (final_forall_tvs, lie_free, binds, [])
468
469   where
470     is_unrestricted | opt_NoMonomorphismRestriction = True
471                     | otherwise                     = isUnRestrictedGroup tysig_names mbind
472
473     tysig_names = [name | (TySigInfo name _ _ _ _ _ _ _) <- sigs]
474
475     doc | null sigs = ptext SLIT("banding(s) for")        <+> pprBinders binder_names
476         | otherwise = ptext SLIT("type signature(s) for") <+> pprBinders binder_names
477
478 -----------------------
479         -- CHECK THAT ALL THE SIGNATURE CONTEXTS ARE UNIFIABLE
480         -- The type signatures on a mutually-recursive group of definitions
481         -- must all have the same context (or none).
482         --
483         -- We unify them because, with polymorphic recursion, their types
484         -- might not otherwise be related.  This is a rather subtle issue.
485         -- ToDo: amplify
486 checkSigsCtxts sigs@(TySigInfo _ id1 sig_tvs theta1 _ _ _ _ : other_sigs)
487   = mapTc_ check_one other_sigs         `thenTc_` 
488     if null theta1 then
489         returnTc ([], [])               -- Non-overloaded type signatures
490     else
491     newDicts SignatureOrigin theta1     `thenNF_Tc` \ sig_dicts ->
492     let
493         -- The "sig_avails" is the stuff available.  We get that from
494         -- the context of the type signature, BUT ALSO the lie_avail
495         -- so that polymorphic recursion works right (see comments at end of fn)
496         sig_avails = sig_dicts ++ sig_meths
497     in
498     returnTc (sig_avails, map instToId sig_dicts)
499   where
500     sig1_dict_tys = map mkPredTy theta1
501     n_sig1_theta  = length theta1
502     sig_meths     = concat [insts | TySigInfo _ _ _ _ _ _ insts _ <- sigs]
503
504     check_one sig@(TySigInfo _ id _ theta _ _ _ src_loc)
505        = tcAddSrcLoc src_loc                                    $
506          tcAddErrCtxt (sigContextsCtxt id1 id)                  $
507          checkTc (length theta == n_sig1_theta) sigContextsErr  `thenTc_`
508          unifyTauTyLists sig1_dict_tys (map mkPredTy theta)
509
510 checkSigsTyVars sigs = mapTc_ check_one sigs
511   where
512     check_one (TySigInfo _ id sig_tyvars sig_theta sig_tau _ _ src_loc)
513       = tcAddSrcLoc src_loc                                                     $
514         tcAddErrCtxtM (sigCtxt (sig_msg id) sig_tyvars sig_theta sig_tau)       $
515         checkSigTyVars sig_tyvars (idFreeTyVars id)
516
517     sig_msg id = ptext SLIT("When checking the type signature for") <+> quotes (ppr id)
518 \end{code}
519
520 @getTyVarsToGen@ decides what type variables to generalise over.
521
522 For a "restricted group" -- see the monomorphism restriction
523 for a definition -- we bind no dictionaries, and
524 remove from tyvars_to_gen any constrained type variables
525
526 *Don't* simplify dicts at this point, because we aren't going
527 to generalise over these dicts.  By the time we do simplify them
528 we may well know more.  For example (this actually came up)
529         f :: Array Int Int
530         f x = array ... xs where xs = [1,2,3,4,5]
531 We don't want to generate lots of (fromInt Int 1), (fromInt Int 2)
532 stuff.  If we simplify only at the f-binding (not the xs-binding)
533 we'll know that the literals are all Ints, and we can just produce
534 Int literals!
535
536 Find all the type variables involved in overloading, the
537 "constrained_tyvars".  These are the ones we *aren't* going to
538 generalise.  We must be careful about doing this:
539
540  (a) If we fail to generalise a tyvar which is not actually
541         constrained, then it will never, ever get bound, and lands
542         up printed out in interface files!  Notorious example:
543                 instance Eq a => Eq (Foo a b) where ..
544         Here, b is not constrained, even though it looks as if it is.
545         Another, more common, example is when there's a Method inst in
546         the LIE, whose type might very well involve non-overloaded
547         type variables.
548   [NOTE: Jan 2001: I don't understand the problem here so I'm doing 
549         the simple thing instead]
550
551  (b) On the other hand, we mustn't generalise tyvars which are constrained,
552         because we are going to pass on out the unmodified LIE, with those
553         tyvars in it.  They won't be in scope if we've generalised them.
554
555 So we are careful, and do a complete simplification just to find the
556 constrained tyvars. We don't use any of the results, except to
557 find which tyvars are constrained.
558
559 \begin{code}
560 isUnRestrictedGroup :: [Name]           -- Signatures given for these
561                     -> RenamedMonoBinds
562                     -> Bool
563
564 is_elem v vs = isIn "isUnResMono" v vs
565
566 isUnRestrictedGroup sigs (PatMonoBind other        _ _) = False
567 isUnRestrictedGroup sigs (VarMonoBind v _)              = v `is_elem` sigs
568 isUnRestrictedGroup sigs (FunMonoBind v _ matches _)    = any isUnRestrictedMatch matches || 
569                                                           v `is_elem` sigs
570 isUnRestrictedGroup sigs (AndMonoBinds mb1 mb2)         = isUnRestrictedGroup sigs mb1 &&
571                                                           isUnRestrictedGroup sigs mb2
572 isUnRestrictedGroup sigs EmptyMonoBinds                 = True
573
574 isUnRestrictedMatch (Match _ [] Nothing _) = False      -- No args, no signature
575 isUnRestrictedMatch other                  = True       -- Some args or a signature
576 \end{code}
577
578
579 %************************************************************************
580 %*                                                                      *
581 \subsection{tcMonoBind}
582 %*                                                                      *
583 %************************************************************************
584
585 @tcMonoBinds@ deals with a single @MonoBind@.  
586 The signatures have been dealt with already.
587
588 \begin{code}
589 tcMonoBinds :: RenamedMonoBinds 
590             -> [TcSigInfo]
591             -> RecFlag
592             -> TcM (TcMonoBinds, 
593                       LIE,              -- LIE required
594                       [Name],           -- Bound names
595                       [TcId])           -- Corresponding monomorphic bound things
596
597 tcMonoBinds mbinds tc_ty_sigs is_rec
598   = tc_mb_pats mbinds           `thenTc` \ (complete_it, lie_req_pat, tvs, ids, lie_avail) ->
599     let
600         id_list           = bagToList ids
601         (names, mono_ids) = unzip id_list
602
603                 -- This last defn is the key one:
604                 -- extend the val envt with bindings for the 
605                 -- things bound in this group, overriding the monomorphic
606                 -- ids with the polymorphic ones from the pattern
607         extra_val_env = case is_rec of
608                           Recursive    -> map mk_bind id_list
609                           NonRecursive -> []
610     in
611         -- Don't know how to deal with pattern-bound existentials yet
612     checkTc (isEmptyBag tvs && isEmptyBag lie_avail) 
613             (existentialExplode mbinds)                 `thenTc_` 
614
615         -- *Before* checking the RHSs, but *after* checking *all* the patterns,
616         -- extend the envt with bindings for all the bound ids;
617         --   and *then* override with the polymorphic Ids from the signatures
618         -- That is the whole point of the "complete_it" stuff.
619         --
620         -- There's a further wrinkle: we have to delay extending the environment
621         -- until after we've dealt with any pattern-bound signature type variables
622         -- Consider  f (x::a) = ...f...
623         -- We're going to check that a isn't unified with anything in the envt, 
624         -- so f itself had better not be!  So we pass the envt binding f into
625         -- complete_it, which extends the actual envt in TcMatches.tcMatch, after
626         -- dealing with the signature tyvars
627
628     complete_it extra_val_env                           `thenTc` \ (mbinds', lie_req_rhss) ->
629
630     returnTc (mbinds', lie_req_pat `plusLIE` lie_req_rhss, names, mono_ids)
631   where
632
633         -- This function is used when dealing with a LHS binder; 
634         -- we make a monomorphic version of the Id.  
635         -- We check for a type signature; if there is one, we use the mono_id
636         -- from the signature.  This is how we make sure the tau part of the
637         -- signature actually maatches the type of the LHS; then tc_mb_pats
638         -- ensures the LHS and RHS have the same type
639         
640     tc_pat_bndr name pat_ty
641         = case maybeSig tc_ty_sigs name of
642             Nothing
643                 -> newLocalId (getOccName name) pat_ty (getSrcLoc name)
644
645             Just (TySigInfo _ _ _ _ _ mono_id _ _)
646                 -> tcAddSrcLoc (getSrcLoc name)         $
647                    unifyTauTy (idType mono_id) pat_ty   `thenTc_`
648                    returnTc mono_id
649
650     mk_bind (name, mono_id) = case maybeSig tc_ty_sigs name of
651                                 Nothing                                   -> (name, mono_id)
652                                 Just (TySigInfo name poly_id _ _ _ _ _ _) -> (name, poly_id)
653
654     tc_mb_pats EmptyMonoBinds
655       = returnTc (\ xve -> returnTc (EmptyMonoBinds, emptyLIE), emptyLIE, emptyBag, emptyBag, emptyLIE)
656
657     tc_mb_pats (AndMonoBinds mb1 mb2)
658       = tc_mb_pats mb1          `thenTc` \ (complete_it1, lie_req1, tvs1, ids1, lie_avail1) ->
659         tc_mb_pats mb2          `thenTc` \ (complete_it2, lie_req2, tvs2, ids2, lie_avail2) ->
660         let
661            complete_it xve = complete_it1 xve   `thenTc` \ (mb1', lie1) ->
662                              complete_it2 xve   `thenTc` \ (mb2', lie2) ->
663                              returnTc (AndMonoBinds mb1' mb2', lie1 `plusLIE` lie2)
664         in
665         returnTc (complete_it,
666                   lie_req1 `plusLIE` lie_req2,
667                   tvs1 `unionBags` tvs2,
668                   ids1 `unionBags` ids2,
669                   lie_avail1 `plusLIE` lie_avail2)
670
671     tc_mb_pats (FunMonoBind name inf matches locn)
672       = newTyVarTy kind                 `thenNF_Tc` \ bndr_ty -> 
673         tc_pat_bndr name bndr_ty        `thenTc` \ bndr_id ->
674         let
675            complete_it xve = tcAddSrcLoc locn                           $
676                              tcMatchesFun xve name bndr_ty  matches     `thenTc` \ (matches', lie) ->
677                              returnTc (FunMonoBind bndr_id inf matches' locn, lie)
678         in
679         returnTc (complete_it, emptyLIE, emptyBag, unitBag (name, bndr_id), emptyLIE)
680
681     tc_mb_pats bind@(PatMonoBind pat grhss locn)
682       = tcAddSrcLoc locn                $
683         newTyVarTy kind                 `thenNF_Tc` \ pat_ty -> 
684
685                 --      Now typecheck the pattern
686                 -- We don't support binding fresh type variables in the
687                 -- pattern of a pattern binding.  For example, this is illegal:
688                 --      (x::a, y::b) = e
689                 -- whereas this is ok
690                 --      (x::Int, y::Bool) = e
691                 --
692                 -- We don't check explicitly for this problem.  Instead, we simply
693                 -- type check the pattern with tcPat.  If the pattern mentions any
694                 -- fresh tyvars we simply get an out-of-scope type variable error
695         tcPat tc_pat_bndr pat pat_ty            `thenTc` \ (pat', lie_req, tvs, ids, lie_avail) ->
696         let
697            complete_it xve = tcAddSrcLoc locn                           $
698                              tcAddErrCtxt (patMonoBindsCtxt bind)       $
699                              tcExtendLocalValEnv xve                    $
700                              tcGRHSs grhss pat_ty PatBindRhs            `thenTc` \ (grhss', lie) ->
701                              returnTc (PatMonoBind pat' grhss' locn, lie)
702         in
703         returnTc (complete_it, lie_req, tvs, ids, lie_avail)
704
705         -- Figure out the appropriate kind for the pattern,
706         -- and generate a suitable type variable 
707     kind = case is_rec of
708                 Recursive    -> liftedTypeKind  -- Recursive, so no unlifted types
709                 NonRecursive -> openTypeKind    -- Non-recursive, so we permit unlifted types
710 \end{code}
711
712
713 %************************************************************************
714 %*                                                                      *
715 \subsection{SPECIALIZE pragmas}
716 %*                                                                      *
717 %************************************************************************
718
719 @tcSpecSigs@ munches up the specialisation "signatures" that arise through *user*
720 pragmas.  It is convenient for them to appear in the @[RenamedSig]@
721 part of a binding because then the same machinery can be used for
722 moving them into place as is done for type signatures.
723
724 They look like this:
725
726 \begin{verbatim}
727         f :: Ord a => [a] -> b -> b
728         {-# SPECIALIZE f :: [Int] -> b -> b #-}
729 \end{verbatim}
730
731 For this we generate:
732 \begin{verbatim}
733         f* = /\ b -> let d1 = ...
734                      in f Int b d1
735 \end{verbatim}
736
737 where f* is a SpecPragmaId.  The **sole** purpose of SpecPragmaIds is to
738 retain a right-hand-side that the simplifier will otherwise discard as
739 dead code... the simplifier has a flag that tells it not to discard
740 SpecPragmaId bindings.
741
742 In this case the f* retains a call-instance of the overloaded
743 function, f, (including appropriate dictionaries) so that the
744 specialiser will subsequently discover that there's a call of @f@ at
745 Int, and will create a specialisation for @f@.  After that, the
746 binding for @f*@ can be discarded.
747
748 We used to have a form
749         {-# SPECIALISE f :: <type> = g #-}
750 which promised that g implemented f at <type>, but we do that with 
751 a RULE now:
752         {-# SPECIALISE (f::<type) = g #-}
753
754 \begin{code}
755 tcSpecSigs :: [RenamedSig] -> TcM (TcMonoBinds, LIE)
756 tcSpecSigs (SpecSig name poly_ty src_loc : sigs)
757   =     -- SPECIALISE f :: forall b. theta => tau  =  g
758     tcAddSrcLoc src_loc                         $
759     tcAddErrCtxt (valSpecSigCtxt name poly_ty)  $
760
761         -- Get and instantiate its alleged specialised type
762     tcHsSigType poly_ty                         `thenTc` \ sig_ty ->
763
764         -- Check that f has a more general type, and build a RHS for
765         -- the spec-pragma-id at the same time
766     tcExpr (HsVar name) sig_ty                  `thenTc` \ (spec_expr, spec_lie) ->
767
768         -- Squeeze out any Methods (see comments with tcSimplifyToDicts)
769     tcSimplifyToDicts spec_lie                  `thenTc` \ (spec_dicts, spec_binds) ->
770
771         -- Just specialise "f" by building a SpecPragmaId binding
772         -- It is the thing that makes sure we don't prematurely 
773         -- dead-code-eliminate the binding we are really interested in.
774     newSpecPragmaId name sig_ty         `thenNF_Tc` \ spec_id ->
775
776         -- Do the rest and combine
777     tcSpecSigs sigs                     `thenTc` \ (binds_rest, lie_rest) ->
778     returnTc (binds_rest `andMonoBinds` VarMonoBind spec_id (mkHsLet spec_binds spec_expr),
779               lie_rest   `plusLIE`      mkLIE spec_dicts)
780
781 tcSpecSigs (other_sig : sigs) = tcSpecSigs sigs
782 tcSpecSigs []                 = returnTc (EmptyMonoBinds, emptyLIE)
783 \end{code}
784
785
786 %************************************************************************
787 %*                                                                      *
788 \subsection[TcBinds-errors]{Error contexts and messages}
789 %*                                                                      *
790 %************************************************************************
791
792
793 \begin{code}
794 patMonoBindsCtxt bind
795   = hang (ptext SLIT("In a pattern binding:")) 4 (ppr bind)
796
797 -----------------------------------------------
798 valSpecSigCtxt v ty
799   = sep [ptext SLIT("In a SPECIALIZE pragma for a value:"),
800          nest 4 (ppr v <+> dcolon <+> ppr ty)]
801
802 -----------------------------------------------
803 sigContextsErr = ptext SLIT("Mismatched contexts")
804
805 sigContextsCtxt s1 s2
806   = hang (hsep [ptext SLIT("When matching the contexts of the signatures for"), 
807                 quotes (ppr s1), ptext SLIT("and"), quotes (ppr s2)])
808          4 (ptext SLIT("(the signature contexts in a mutually recursive group should all be identical)"))
809
810 -----------------------------------------------
811 unliftedBindErr flavour mbind
812   = hang (text flavour <+> ptext SLIT("bindings for unlifted types aren't allowed:"))
813          4 (ppr mbind)
814
815 -----------------------------------------------
816 existentialExplode mbinds
817   = hang (vcat [text "My brain just exploded.",
818                 text "I can't handle pattern bindings for existentially-quantified constructors.",
819                 text "In the binding group"])
820         4 (ppr mbinds)
821
822 -----------------------------------------------
823 restrictedBindCtxtErr binder_names
824   = hang (ptext SLIT("Illegal overloaded type signature(s)"))
825        4 (vcat [ptext SLIT("in a binding group for") <+> pprBinders binder_names,
826                 ptext SLIT("that falls under the monomorphism restriction")])
827
828 -- Used in error messages
829 pprBinders bndrs = braces (pprWithCommas ppr bndrs)
830 \end{code}