Haskell Program Coverage
[ghc-hetmet.git] / compiler / typecheck / TcRnDriver.lhs
1 %
2 % (c) The University of Glasgow 2006
3 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
4 %
5 \section[TcModule]{Typechecking a whole module}
6
7 \begin{code}
8 module TcRnDriver (
9 #ifdef GHCI
10         tcRnStmt, tcRnExpr, tcRnType,
11         tcRnLookupRdrName,
12         tcRnLookupName,
13         tcRnGetInfo,
14         getModuleExports, 
15 #endif
16         tcRnModule, 
17         tcTopSrcDecls,
18         tcRnExtCore
19     ) where
20
21 #include "HsVersions.h"
22
23 import IO
24 #ifdef GHCI
25 import {-# SOURCE #-} TcSplice ( tcSpliceDecls )
26 #endif
27
28 import DynFlags
29 import StaticFlags
30 import HsSyn
31 import RdrHsSyn
32
33 import PrelNames
34 import RdrName
35 import TcHsSyn
36 import TcExpr
37 import TcRnMonad
38 import TcType
39 import Inst
40 import FamInst
41 import InstEnv
42 import FamInstEnv
43 import TcBinds
44 import TcDefaults
45 import TcEnv
46 import TcRules
47 import TcForeign
48 import TcInstDcls
49 import TcIface
50 import MkIface
51 import IfaceSyn
52 import TcSimplify
53 import TcTyClsDecls
54 import LoadIface
55 import RnNames
56 import RnEnv
57 import RnSource
58 import RnHsDoc
59 import PprCore
60 import CoreSyn
61 import ErrUtils
62 import Id
63 import Var
64 import Module
65 import UniqFM
66 import Name
67 import NameSet
68 import NameEnv
69 import TyCon
70 import SrcLoc
71 import HscTypes
72 import Outputable
73
74 #ifdef GHCI
75 import TcHsType
76 import TcMType
77 import TcMatches
78 import TcGadt
79 import RnTypes
80 import RnExpr
81 import IfaceEnv
82 import MkId
83 import TysWiredIn
84 import IdInfo
85 import {- Kind parts of -} Type
86 import BasicTypes
87 import Data.Maybe
88 #endif
89
90 import FastString
91 import Util
92 import Bag
93
94 import Control.Monad    ( unless )
95 import Data.Maybe       ( isJust )
96 \end{code}
97
98
99
100 %************************************************************************
101 %*                                                                      *
102         Typecheck and rename a module
103 %*                                                                      *
104 %************************************************************************
105
106
107 \begin{code}
108 tcRnModule :: HscEnv 
109            -> HscSource
110            -> Bool              -- True <=> save renamed syntax
111            -> Located (HsModule RdrName)
112            -> IO (Messages, Maybe TcGblEnv)
113
114 tcRnModule hsc_env hsc_src save_rn_syntax
115          (L loc (HsModule maybe_mod export_ies 
116                           import_decls local_decls mod_deprec _ module_info maybe_doc))
117  = do { showPass (hsc_dflags hsc_env) "Renamer/typechecker" ;
118
119    let { this_pkg = thisPackage (hsc_dflags hsc_env) ;
120          this_mod = case maybe_mod of
121                         Nothing  -> mAIN        -- 'module M where' is omitted
122                         Just (L _ mod) -> mkModule this_pkg mod } ;
123                                                 -- The normal case
124                 
125    initTc hsc_env hsc_src this_mod $ 
126    setSrcSpan loc $
127    do {
128                 -- Deal with imports;
129         (rn_imports, rdr_env, imports) <- rnImports import_decls ;
130
131         let { dep_mods :: ModuleNameEnv (ModuleName, IsBootInterface)
132             ; dep_mods = imp_dep_mods imports
133
134                 -- We want instance declarations from all home-package
135                 -- modules below this one, including boot modules, except
136                 -- ourselves.  The 'except ourselves' is so that we don't
137                 -- get the instances from this module's hs-boot file
138             ; want_instances :: ModuleName -> Bool
139             ; want_instances mod = mod `elemUFM` dep_mods
140                                    && mod /= moduleName this_mod
141             ; home_insts = hptInstances hsc_env want_instances
142             } ;
143
144                 -- Record boot-file info in the EPS, so that it's 
145                 -- visible to loadHiBootInterface in tcRnSrcDecls,
146                 -- and any other incrementally-performed imports
147         updateEps_ (\eps -> eps { eps_is_boot = dep_mods }) ;
148
149                 -- Update the gbl env
150         updGblEnv ( \ gbl -> 
151                 gbl { tcg_rdr_env  = plusOccEnv (tcg_rdr_env gbl) rdr_env,
152                       tcg_inst_env = extendInstEnvList (tcg_inst_env gbl) home_insts,
153                       tcg_imports  = tcg_imports gbl `plusImportAvails` imports,
154                       tcg_rn_imports = if save_rn_syntax then
155                                          Just rn_imports
156                                        else
157                                          Nothing,
158                       tcg_rn_decls = if save_rn_syntax then
159                                         Just emptyRnGroup
160                                      else
161                                         Nothing })
162                 $ do {
163
164         traceRn (text "rn1" <+> ppr (imp_dep_mods imports)) ;
165                 -- Fail if there are any errors so far
166                 -- The error printing (if needed) takes advantage 
167                 -- of the tcg_env we have now set
168         traceIf (text "rdr_env: " <+> ppr rdr_env) ;
169         failIfErrsM ;
170
171                 -- Load any orphan-module and family instance-module
172                 -- interfaces, so that their rules and instance decls will be
173                 -- found.
174         loadOrphanModules (imp_orphs  imports) False ;
175         loadOrphanModules (imp_finsts imports) True  ;
176
177         let { directlyImpMods =   map (\(mod, _, _) -> mod) 
178                                 . moduleEnvElts 
179                                 . imp_mods 
180                                 $ imports } ;
181         checkFamInstConsistency (imp_finsts imports) directlyImpMods ;
182
183         traceRn (text "rn1a") ;
184                 -- Rename and type check the declarations
185         tcg_env <- if isHsBoot hsc_src then
186                         tcRnHsBootDecls local_decls
187                    else 
188                         tcRnSrcDecls local_decls ;
189         setGblEnv tcg_env               $ do {
190
191         traceRn (text "rn3") ;
192
193                 -- Report the use of any deprecated things
194                 -- We do this before processsing the export list so
195                 -- that we don't bleat about re-exporting a deprecated
196                 -- thing (especially via 'module Foo' export item)
197                 -- Only uses in the body of the module are complained about
198         reportDeprecations (hsc_dflags hsc_env) tcg_env ;
199
200                 -- Process the export list
201         (rn_exports, exports) <- rnExports (isJust maybe_mod) export_ies ;
202                  
203         traceRn (text "rn4") ;
204
205                 -- Rename the Haddock documentation header 
206         rn_module_doc <- rnMbHsDoc maybe_doc ;
207
208                 -- Rename the Haddock module info 
209         rn_description <- rnMbHsDoc (hmi_description module_info) ;
210         let { rn_module_info = module_info { hmi_description = rn_description } } ;
211
212                 -- Check whether the entire module is deprecated
213                 -- This happens only once per module
214         let { mod_deprecs = checkModDeprec mod_deprec } ;
215
216                 -- Add exports and deprecations to envt
217         let { final_env  = tcg_env { tcg_exports = exports,
218                                      tcg_rn_exports = if save_rn_syntax then
219                                                          rn_exports
220                                                       else Nothing,
221                                      tcg_dus = tcg_dus tcg_env `plusDU` usesOnly (availsToNameSet exports),
222                                      tcg_deprecs = tcg_deprecs tcg_env `plusDeprecs` 
223                                                    mod_deprecs,
224                                      tcg_doc = rn_module_doc, 
225                                      tcg_hmi = rn_module_info
226                                   }
227                 -- A module deprecation over-rides the earlier ones
228              } ;
229
230                 -- Report unused names
231         reportUnusedNames export_ies final_env ;
232
233                 -- Dump output and return
234         tcDump final_env ;
235         return final_env
236     }}}}
237 \end{code}
238
239
240 %************************************************************************
241 %*                                                                      *
242         Type-checking external-core modules
243 %*                                                                      *
244 %************************************************************************
245
246 \begin{code}
247 tcRnExtCore :: HscEnv 
248             -> HsExtCore RdrName
249             -> IO (Messages, Maybe ModGuts)
250         -- Nothing => some error occurred 
251
252 tcRnExtCore hsc_env (HsExtCore this_mod decls src_binds)
253         -- The decls are IfaceDecls; all names are original names
254  = do { showPass (hsc_dflags hsc_env) "Renamer/typechecker" ;
255
256    initTc hsc_env ExtCoreFile this_mod $ do {
257
258    let { ldecls  = map noLoc decls } ;
259
260         -- Deal with the type declarations; first bring their stuff
261         -- into scope, then rname them, then type check them
262    tcg_env  <- importsFromLocalDecls (mkFakeGroup ldecls) ;
263
264    setGblEnv tcg_env $ do {
265
266    rn_decls <- rnTyClDecls ldecls ;
267    failIfErrsM ;
268
269         -- Dump trace of renaming part
270    rnDump (ppr rn_decls) ;
271
272         -- Typecheck them all together so that
273         -- any mutually recursive types are done right
274    tcg_env <- checkNoErrs (tcTyAndClassDecls emptyModDetails rn_decls) ;
275         -- Make the new type env available to stuff slurped from interface files
276
277    setGblEnv tcg_env $ do {
278    
279         -- Now the core bindings
280    core_binds <- initIfaceExtCore (tcExtCoreBindings src_binds) ;
281
282         -- Wrap up
283    let {
284         bndrs      = bindersOfBinds core_binds ;
285         my_exports = map (Avail . idName) bndrs ;
286                 -- ToDo: export the data types also?
287
288         final_type_env = extendTypeEnvWithIds (tcg_type_env tcg_env) bndrs ;
289
290         mod_guts = ModGuts {    mg_module    = this_mod,
291                                 mg_boot      = False,
292                                 mg_usages    = [],              -- ToDo: compute usage
293                                 mg_dir_imps  = [],              -- ??
294                                 mg_deps      = noDependencies,  -- ??
295                                 mg_exports   = my_exports,
296                                 mg_types     = final_type_env,
297                                 mg_insts     = tcg_insts tcg_env,
298                                 mg_fam_insts = tcg_fam_insts tcg_env,
299                                 mg_rules     = [],
300                                 mg_binds     = core_binds,
301
302                                 -- Stubs
303                                 mg_rdr_env   = emptyGlobalRdrEnv,
304                                 mg_fix_env   = emptyFixityEnv,
305                                 mg_deprecs   = NoDeprecs,
306                                 mg_foreign   = NoStubs,
307                                 mg_hpc_info = noHpcInfo
308                     } } ;
309
310    tcCoreDump mod_guts ;
311
312    return mod_guts
313    }}}}
314
315 mkFakeGroup decls -- Rather clumsy; lots of unused fields
316   = emptyRdrGroup { hs_tyclds = decls }
317 \end{code}
318
319
320 %************************************************************************
321 %*                                                                      *
322         Type-checking the top level of a module
323 %*                                                                      *
324 %************************************************************************
325
326 \begin{code}
327 tcRnSrcDecls :: [LHsDecl RdrName] -> TcM TcGblEnv
328         -- Returns the variables free in the decls
329         -- Reason: solely to report unused imports and bindings
330 tcRnSrcDecls decls
331  = do {         -- Load the hi-boot interface for this module, if any
332                 -- We do this now so that the boot_names can be passed
333                 -- to tcTyAndClassDecls, because the boot_names are 
334                 -- automatically considered to be loop breakers
335         mod <- getModule ;
336         boot_iface <- tcHiBootIface mod ;
337
338                 -- Do all the declarations
339         (tc_envs, lie) <- getLIE (tc_rn_src_decls boot_iface decls) ;
340
341              -- tcSimplifyTop deals with constant or ambiguous InstIds.  
342              -- How could there be ambiguous ones?  They can only arise if a
343              -- top-level decl falls under the monomorphism
344              -- restriction, and no subsequent decl instantiates its
345              -- type.  (Usually, ambiguous type variables are resolved
346              -- during the generalisation step.)
347         traceTc (text "Tc8") ;
348         inst_binds <- setEnvs tc_envs (tcSimplifyTop lie) ;
349                 -- Setting the global env exposes the instances to tcSimplifyTop
350                 -- Setting the local env exposes the local Ids to tcSimplifyTop, 
351                 -- so that we get better error messages (monomorphism restriction)
352
353             -- Backsubstitution.  This must be done last.
354             -- Even tcSimplifyTop may do some unification.
355         traceTc (text "Tc9") ;
356         let { (tcg_env, _) = tc_envs ;
357               TcGblEnv { tcg_type_env = type_env, tcg_binds = binds, 
358                          tcg_rules = rules, tcg_fords = fords } = tcg_env } ;
359
360         (bind_ids, binds', fords', rules') <- zonkTopDecls (binds `unionBags` inst_binds)
361                                                            rules fords ;
362
363         let { final_type_env = extendTypeEnvWithIds type_env bind_ids
364             ; tcg_env' = tcg_env { tcg_type_env = final_type_env,
365                                    tcg_binds = binds',
366                                    tcg_rules = rules', 
367                                    tcg_fords = fords' } } ;
368
369         -- Make the new type env available to stuff slurped from interface files
370         writeMutVar (tcg_type_env_var tcg_env) final_type_env ;
371
372         -- Compare the hi-boot iface (if any) with the real thing
373         dfun_binds <- checkHiBootIface tcg_env' boot_iface ;
374
375         return (tcg_env' { tcg_binds = tcg_binds tcg_env' `unionBags` dfun_binds }) 
376    }
377
378 tc_rn_src_decls :: ModDetails -> [LHsDecl RdrName] -> TcM (TcGblEnv, TcLclEnv)
379 -- Loops around dealing with each top level inter-splice group 
380 -- in turn, until it's dealt with the entire module
381 tc_rn_src_decls boot_details ds
382  = do { let { (first_group, group_tail) = findSplice ds } ;
383                 -- If ds is [] we get ([], Nothing)
384
385         -- Type check the decls up to, but not including, the first splice
386         tc_envs@(tcg_env,tcl_env) <- tcRnGroup boot_details first_group ;
387
388         -- Bale out if errors; for example, error recovery when checking
389         -- the RHS of 'main' can mean that 'main' is not in the envt for 
390         -- the subsequent checkMain test
391         failIfErrsM ;
392
393         setEnvs tc_envs $
394
395         -- If there is no splice, we're nearly done
396         case group_tail of {
397            Nothing -> do {      -- Last thing: check for `main'
398                            tcg_env <- checkMain ;
399                            return (tcg_env, tcl_env) 
400                       } ;
401
402         -- If there's a splice, we must carry on
403            Just (SpliceDecl splice_expr, rest_ds) -> do {
404 #ifndef GHCI
405         failWithTc (text "Can't do a top-level splice; need a bootstrapped compiler")
406 #else
407
408         -- Rename the splice expression, and get its supporting decls
409         (rn_splice_expr, splice_fvs) <- rnLExpr splice_expr ;
410         failIfErrsM ;   -- Don't typecheck if renaming failed
411         rnDump (ppr rn_splice_expr) ;
412
413         -- Execute the splice
414         spliced_decls <- tcSpliceDecls rn_splice_expr ;
415
416         -- Glue them on the front of the remaining decls and loop
417         setGblEnv (tcg_env `addTcgDUs` usesOnly splice_fvs) $
418         tc_rn_src_decls boot_details (spliced_decls ++ rest_ds)
419 #endif /* GHCI */
420     }}}
421 \end{code}
422
423 %************************************************************************
424 %*                                                                      *
425         Compiling hs-boot source files, and
426         comparing the hi-boot interface with the real thing
427 %*                                                                      *
428 %************************************************************************
429
430 \begin{code}
431 tcRnHsBootDecls :: [LHsDecl RdrName] -> TcM TcGblEnv
432 tcRnHsBootDecls decls
433    = do { let { (first_group, group_tail) = findSplice decls }
434
435         ; case group_tail of
436              Just stuff -> spliceInHsBootErr stuff
437              Nothing    -> return ()
438
439                 -- Rename the declarations
440         ; (tcg_env, rn_group) <- rnTopSrcDecls first_group
441         ; setGblEnv tcg_env $ do {
442
443         -- Todo: check no foreign decls, no rules, no default decls
444
445                 -- Typecheck type/class decls
446         ; traceTc (text "Tc2")
447         ; let tycl_decls = hs_tyclds rn_group
448         ; tcg_env <- checkNoErrs (tcTyAndClassDecls emptyModDetails tycl_decls)
449         ; setGblEnv tcg_env     $ do {
450
451                 -- Typecheck instance decls
452         ; traceTc (text "Tc3")
453         ; (tcg_env, inst_infos, _binds) 
454             <- tcInstDecls1 tycl_decls (hs_instds rn_group) (hs_derivds rn_group)
455         ; setGblEnv tcg_env     $ do {
456
457                 -- Typecheck value declarations
458         ; traceTc (text "Tc5") 
459         ; val_ids <- tcHsBootSigs (hs_valds rn_group)
460
461                 -- Wrap up
462                 -- No simplification or zonking to do
463         ; traceTc (text "Tc7a")
464         ; gbl_env <- getGblEnv 
465         
466                 -- Make the final type-env
467                 -- Include the dfun_ids so that their type sigs
468                 -- are written into the interface file
469         ; let { type_env0 = tcg_type_env gbl_env
470               ; type_env1 = extendTypeEnvWithIds type_env0 val_ids
471               ; type_env2 = extendTypeEnvWithIds type_env1 dfun_ids 
472               ; dfun_ids = map iDFunId inst_infos }
473         ; return (gbl_env { tcg_type_env = type_env2 }) 
474    }}}}
475
476 spliceInHsBootErr (SpliceDecl (L loc _), _)
477   = addErrAt loc (ptext SLIT("Splices are not allowed in hs-boot files"))
478 \end{code}
479
480 Once we've typechecked the body of the module, we want to compare what
481 we've found (gathered in a TypeEnv) with the hi-boot details (if any).
482
483 \begin{code}
484 checkHiBootIface :: TcGblEnv -> ModDetails -> TcM (LHsBinds Id)
485 -- Compare the hi-boot file for this module (if there is one)
486 -- with the type environment we've just come up with
487 -- In the common case where there is no hi-boot file, the list
488 -- of boot_names is empty.
489 --
490 -- The bindings we return give bindings for the dfuns defined in the
491 -- hs-boot file, such as        $fbEqT = $fEqT
492
493 checkHiBootIface
494         (TcGblEnv { tcg_insts = local_insts, tcg_fam_insts = local_fam_insts,
495                     tcg_type_env = local_type_env })
496         (ModDetails { md_insts = boot_insts, md_fam_insts = boot_fam_insts,
497                       md_types = boot_type_env })
498   = do  { traceTc (text "checkHiBootIface" <+> (ppr boot_type_env $$ ppr boot_insts)) ;
499         ; mapM_ check_one (typeEnvElts boot_type_env)
500         ; dfun_binds <- mapM check_inst boot_insts
501         ; unless (null boot_fam_insts) $
502             panic ("TcRnDriver.checkHiBootIface: Cannot handle family " ++
503                    "instances in boot files yet...")
504             -- FIXME: Why?  The actual comparison is not hard, but what would
505             --        be the equivalent to the dfun bindings returned for class
506             --        instances?  We can't easily equate tycons...
507         ; return (unionManyBags dfun_binds) }
508   where
509     check_one boot_thing
510       | isImplicitTyThing boot_thing = return ()
511       | name `elem` dfun_names       = return ()        
512       | isWiredInName name           = return ()        -- No checking for wired-in names.  In particular,
513                                                         -- 'error' is handled by a rather gross hack
514                                                         -- (see comments in GHC.Err.hs-boot)
515       | Just real_thing <- lookupTypeEnv local_type_env name
516       = do { let boot_decl = tyThingToIfaceDecl boot_thing
517                  real_decl = tyThingToIfaceDecl real_thing
518            ; checkTc (checkBootDecl boot_decl real_decl)
519                      (bootMisMatch boot_thing boot_decl real_decl) }
520                 -- The easiest way to check compatibility is to convert to
521                 -- iface syntax, where we already have good comparison functions
522       | otherwise
523       = addErrTc (missingBootThing boot_thing)
524       where
525         name = getName boot_thing
526
527     dfun_names = map getName boot_insts
528
529     check_inst boot_inst
530         = case [dfun | inst <- local_insts, 
531                        let dfun = instanceDFunId inst,
532                        idType dfun `tcEqType` boot_inst_ty ] of
533             [] -> do { addErrTc (instMisMatch boot_inst); return emptyBag }
534             (dfun:_) -> return (unitBag $ noLoc $ VarBind local_boot_dfun (nlHsVar dfun))
535         where
536           boot_dfun = instanceDFunId boot_inst
537           boot_inst_ty = idType boot_dfun
538           local_boot_dfun = Id.mkExportedLocalId (idName boot_dfun) boot_inst_ty
539
540 ----------------
541 missingBootThing thing
542   = ppr thing <+> ptext SLIT("is defined in the hs-boot file, but not in the module")
543 bootMisMatch thing boot_decl real_decl
544   = vcat [ppr thing <+> ptext SLIT("has conflicting definitions in the module and its hs-boot file"),
545           ptext SLIT("Decl") <+> ppr real_decl,
546           ptext SLIT("Boot file:") <+> ppr boot_decl]
547 instMisMatch inst
548   = hang (ppr inst)
549        2 (ptext SLIT("is defined in the hs-boot file, but not in the module"))
550 \end{code}
551
552
553 %************************************************************************
554 %*                                                                      *
555         Type-checking the top level of a module
556 %*                                                                      *
557 %************************************************************************
558
559 tcRnGroup takes a bunch of top-level source-code declarations, and
560  * renames them
561  * gets supporting declarations from interface files
562  * typechecks them
563  * zonks them
564  * and augments the TcGblEnv with the results
565
566 In Template Haskell it may be called repeatedly for each group of
567 declarations.  It expects there to be an incoming TcGblEnv in the
568 monad; it augments it and returns the new TcGblEnv.
569
570 \begin{code}
571 tcRnGroup :: ModDetails -> HsGroup RdrName -> TcM (TcGblEnv, TcLclEnv)
572         -- Returns the variables free in the decls, for unused-binding reporting
573 tcRnGroup boot_details decls
574  = do {         -- Rename the declarations
575         (tcg_env, rn_decls) <- rnTopSrcDecls decls ;
576         setGblEnv tcg_env $ do {
577
578                 -- Typecheck the declarations
579         tcTopSrcDecls boot_details rn_decls 
580   }}
581
582 ------------------------------------------------
583 rnTopSrcDecls :: HsGroup RdrName -> TcM (TcGblEnv, HsGroup Name)
584 rnTopSrcDecls group
585  = do {         -- Bring top level binders into scope
586         tcg_env <- importsFromLocalDecls group ;
587         setGblEnv tcg_env $ do {
588
589         failIfErrsM ;   -- No point in continuing if (say) we have duplicate declarations
590
591                 -- Rename the source decls
592         (tcg_env, rn_decls) <- rnSrcDecls group ;
593         failIfErrsM ;
594
595                 -- save the renamed syntax, if we want it
596         let { tcg_env'
597                 | Just grp <- tcg_rn_decls tcg_env
598                   = tcg_env{ tcg_rn_decls = Just (appendGroups grp rn_decls) }
599                 | otherwise
600                    = tcg_env };
601
602                 -- Dump trace of renaming part
603         rnDump (ppr rn_decls) ;
604
605         return (tcg_env', rn_decls)
606    }}
607
608 ------------------------------------------------
609 tcTopSrcDecls :: ModDetails -> HsGroup Name -> TcM (TcGblEnv, TcLclEnv)
610 tcTopSrcDecls boot_details
611         (HsGroup { hs_tyclds = tycl_decls, 
612                    hs_instds = inst_decls,
613                    hs_derivds = deriv_decls,
614                    hs_fords  = foreign_decls,
615                    hs_defds  = default_decls,
616                    hs_ruleds = rule_decls,
617                    hs_valds  = val_binds })
618  = do {         -- Type-check the type and class decls, and all imported decls
619                 -- The latter come in via tycl_decls
620         traceTc (text "Tc2") ;
621
622         tcg_env <- checkNoErrs (tcTyAndClassDecls boot_details tycl_decls) ;
623         -- tcTyAndClassDecls recovers internally, but if anything gave rise to
624         -- an error we'd better stop now, to avoid a cascade
625         
626         -- Make these type and class decls available to stuff slurped from interface files
627         writeMutVar (tcg_type_env_var tcg_env) (tcg_type_env tcg_env) ;
628
629
630         setGblEnv tcg_env       $ do {
631                 -- Source-language instances, including derivings,
632                 -- and import the supporting declarations
633         traceTc (text "Tc3") ;
634         (tcg_env, inst_infos, deriv_binds) 
635             <- tcInstDecls1 tycl_decls inst_decls deriv_decls;
636         setGblEnv tcg_env       $ do {
637
638                 -- Foreign import declarations next.  No zonking necessary
639                 -- here; we can tuck them straight into the global environment.
640         traceTc (text "Tc4") ;
641         (fi_ids, fi_decls) <- tcForeignImports foreign_decls ;
642         tcExtendGlobalValEnv fi_ids     $ do {
643
644                 -- Default declarations
645         traceTc (text "Tc4a") ;
646         default_tys <- tcDefaults default_decls ;
647         updGblEnv (\gbl -> gbl { tcg_default = default_tys }) $ do {
648         
649                 -- Value declarations next
650                 -- We also typecheck any extra binds that came out 
651                 -- of the "deriving" process (deriv_binds)
652         traceTc (text "Tc5") ;
653         (tc_val_binds, tcl_env) <- tcTopBinds (val_binds `plusHsValBinds` deriv_binds) ;
654         setLclTypeEnv tcl_env   $ do {
655
656                 -- Second pass over class and instance declarations, 
657         traceTc (text "Tc6") ;
658         (inst_binds, tcl_env) <- tcInstDecls2 tycl_decls inst_infos ;
659         showLIE (text "after instDecls2") ;
660
661                 -- Foreign exports
662                 -- They need to be zonked, so we return them
663         traceTc (text "Tc7") ;
664         (foe_binds, foe_decls) <- tcForeignExports foreign_decls ;
665
666                 -- Rules
667         rules <- tcRules rule_decls ;
668
669                 -- Wrap up
670         traceTc (text "Tc7a") ;
671         tcg_env <- getGblEnv ;
672         let { all_binds = tc_val_binds   `unionBags`
673                           inst_binds     `unionBags`
674                           foe_binds  ;
675
676                 -- Extend the GblEnv with the (as yet un-zonked) 
677                 -- bindings, rules, foreign decls
678               tcg_env' = tcg_env {  tcg_binds = tcg_binds tcg_env `unionBags` all_binds,
679                                     tcg_rules = tcg_rules tcg_env ++ rules,
680                                     tcg_fords = tcg_fords tcg_env ++ foe_decls ++ fi_decls } } ;
681         return (tcg_env', tcl_env)
682     }}}}}}
683 \end{code}
684
685
686 %************************************************************************
687 %*                                                                      *
688         Checking for 'main'
689 %*                                                                      *
690 %************************************************************************
691
692 \begin{code}
693 checkMain :: TcM TcGblEnv
694 -- If we are in module Main, check that 'main' is defined.
695 checkMain 
696   = do { ghc_mode <- getGhcMode ;
697          tcg_env   <- getGblEnv ;
698          dflags    <- getDOpts ;
699          let { main_mod = mainModIs dflags ;
700                main_fn  = case mainFunIs dflags of {
701                                 Just fn -> mkRdrUnqual (mkVarOccFS (mkFastString fn)) ;
702                                 Nothing -> main_RDR_Unqual } } ;
703         
704          check_main ghc_mode tcg_env main_mod main_fn
705     }
706
707
708 check_main ghc_mode tcg_env main_mod main_fn
709  | mod /= main_mod
710  = traceTc (text "checkMain not" <+> ppr main_mod <+> ppr mod) >>
711    return tcg_env
712
713  | otherwise
714  = addErrCtxt mainCtxt                  $
715    do   { mb_main <- lookupSrcOcc_maybe main_fn
716                 -- Check that 'main' is in scope
717                 -- It might be imported from another module!
718         ; case mb_main of {
719              Nothing -> do { traceTc (text "checkMain fail" <+> ppr main_mod <+> ppr main_fn)
720                            ; complain_no_main   
721                            ; return tcg_env } ;
722              Just main_name -> do
723         { traceTc (text "checkMain found" <+> ppr main_mod <+> ppr main_fn)
724         ; let { rhs = nlHsApp (nlHsVar runMainIOName) (nlHsVar main_name) }
725                         -- :Main.main :: IO () = runMainIO main 
726
727         ; (main_expr, ty) <- setSrcSpan (srcLocSpan (getSrcLoc main_name)) $
728                              tcInferRho rhs
729
730         -- The function that the RTS invokes is always :Main.main,
731         -- which we call root_main_id.  
732         -- (Because GHC allows the user to have a module not called 
733         -- Main as the main module, we can't rely on the main function
734         -- being called "Main.main".  That's why root_main_id has a fixed
735         -- module ":Main".)
736         -- We also make root_main_id an implicit Id, by making main_name
737         -- its parent (hence (Just main_name)).  That has the effect
738         -- of preventing its type and unfolding from getting out into
739         -- the interface file. Otherwise we can end up with two defns
740         -- for 'main' in the interface file!
741
742         ; let { root_main_name =  mkExternalName rootMainKey rOOT_MAIN 
743                                    (mkVarOccFS FSLIT("main")) 
744                                    (getSrcLoc main_name)
745               ; root_main_id = Id.mkExportedLocalId root_main_name ty
746               ; main_bind    = noLoc (VarBind root_main_id main_expr) }
747
748         ; return (tcg_env { tcg_binds = tcg_binds tcg_env 
749                                         `snocBag` main_bind,
750                             tcg_dus   = tcg_dus tcg_env
751                                         `plusDU` usesOnly (unitFV main_name)
752                         -- Record the use of 'main', so that we don't 
753                         -- complain about it being defined but not used
754                  }) 
755     }}}
756   where
757     mod = tcg_mod tcg_env
758  
759     complain_no_main | ghc_mode == Interactive = return ()
760                      | otherwise                = failWithTc noMainMsg
761         -- In interactive mode, don't worry about the absence of 'main'
762         -- In other modes, fail altogether, so that we don't go on
763         -- and complain a second time when processing the export list.
764
765     mainCtxt  = ptext SLIT("When checking the type of the main function") <+> quotes (ppr main_fn)
766     noMainMsg = ptext SLIT("The main function") <+> quotes (ppr main_fn) 
767                 <+> ptext SLIT("is not defined in module") <+> quotes (ppr main_mod)
768 \end{code}
769
770 %*********************************************************
771 %*                                                       *
772                 GHCi stuff
773 %*                                                       *
774 %*********************************************************
775
776 \begin{code}
777 #ifdef GHCI
778 setInteractiveContext :: HscEnv -> InteractiveContext -> TcRn a -> TcRn a
779 setInteractiveContext hsc_env icxt thing_inside 
780   = let 
781         -- Initialise the tcg_inst_env with instances 
782         -- from all home modules.  This mimics the more selective
783         -- call to hptInstances in tcRnModule
784         dfuns = hptInstances hsc_env (\mod -> True)
785     in
786     updGblEnv (\env -> env { 
787         tcg_rdr_env  = ic_rn_gbl_env icxt,
788         tcg_type_env = ic_type_env   icxt,
789         tcg_inst_env = extendInstEnvList (tcg_inst_env env) dfuns }) $
790
791     updLclEnv (\env -> env { tcl_rdr = ic_rn_local_env icxt })  $
792
793     do  { traceTc (text "setIC" <+> ppr (ic_type_env icxt))
794         ; thing_inside }
795 \end{code}
796
797
798 \begin{code}
799 tcRnStmt :: HscEnv
800          -> InteractiveContext
801          -> LStmt RdrName
802          -> IO (Maybe (InteractiveContext, [Name], LHsExpr Id))
803                 -- The returned [Name] is the same as the input except for
804                 -- ExprStmt, in which case the returned [Name] is [itName]
805                 --
806                 -- The returned TypecheckedHsExpr is of type IO [ () ],
807                 -- a list of the bound values, coerced to ().
808
809 tcRnStmt hsc_env ictxt rdr_stmt
810   = initTcPrintErrors hsc_env iNTERACTIVE $ 
811     setInteractiveContext hsc_env ictxt $ do {
812
813     -- Rename; use CmdLineMode because tcRnStmt is only used interactively
814     (([rn_stmt], _), fvs) <- rnStmts DoExpr [rdr_stmt] (return ((), emptyFVs)) ;
815     traceRn (text "tcRnStmt" <+> vcat [ppr rdr_stmt, ppr rn_stmt, ppr fvs]) ;
816     failIfErrsM ;
817     
818     -- The real work is done here
819     (bound_ids, tc_expr) <- mkPlan rn_stmt ;
820     zonked_expr <- zonkTopLExpr tc_expr ;
821     zonked_ids  <- zonkTopBndrs bound_ids ;
822     
823         -- None of the Ids should be of unboxed type, because we
824         -- cast them all to HValues in the end!
825     mappM bad_unboxed (filter (isUnLiftedType . idType) zonked_ids) ;
826
827     traceTc (text "tcs 1") ;
828     let {       -- (a) Make all the bound ids "global" ids, now that
829                 --     they're notionally top-level bindings.  This is
830                 --     important: otherwise when we come to compile an expression
831                 --     using these ids later, the byte code generator will consider
832                 --     the occurrences to be free rather than global.
833                 -- 
834                 -- (b) Tidy their types; this is important, because :info may
835                 --     ask to look at them, and :info expects the things it looks
836                 --     up to have tidy types
837         global_ids = map globaliseAndTidy zonked_ids ;
838     
839                 -- Update the interactive context
840         rn_env   = ic_rn_local_env ictxt ;
841         type_env = ic_type_env ictxt ;
842
843         bound_names = map idName global_ids ;
844         new_rn_env  = extendLocalRdrEnv rn_env bound_names ;
845
846 {- ---------------------------------------------
847    At one stage I removed any shadowed bindings from the type_env;
848    they are inaccessible but might, I suppose, cause a space leak if we leave them there.
849    However, with Template Haskell they aren't necessarily inaccessible.  Consider this
850    GHCi session
851          Prelude> let f n = n * 2 :: Int
852          Prelude> fName <- runQ [| f |]
853          Prelude> $(return $ AppE fName (LitE (IntegerL 7)))
854          14
855          Prelude> let f n = n * 3 :: Int
856          Prelude> $(return $ AppE fName (LitE (IntegerL 7)))
857    In the last line we use 'fName', which resolves to the *first* 'f'
858    in scope. If we delete it from the type env, GHCi crashes because
859    it doesn't expect that.
860  
861    Hence this code is commented out
862
863         shadowed = [ n | name <- bound_names,
864                          let rdr_name = mkRdrUnqual (nameOccName name),
865                          Just n <- [lookupLocalRdrEnv rn_env rdr_name] ] ;
866         filtered_type_env = delListFromNameEnv type_env shadowed ;
867 -------------------------------------------------- -}
868
869         new_type_env = extendTypeEnvWithIds type_env global_ids ;
870         new_ic = ictxt { ic_rn_local_env = new_rn_env, 
871                          ic_type_env     = new_type_env }
872     } ;
873
874     dumpOptTcRn Opt_D_dump_tc 
875         (vcat [text "Bound Ids" <+> pprWithCommas ppr global_ids,
876                text "Typechecked expr" <+> ppr zonked_expr]) ;
877
878     returnM (new_ic, bound_names, zonked_expr)
879     }
880   where
881     bad_unboxed id = addErr (sep [ptext SLIT("GHCi can't bind a variable of unlifted type:"),
882                                   nest 2 (ppr id <+> dcolon <+> ppr (idType id))])
883
884 globaliseAndTidy :: Id -> Id
885 globaliseAndTidy id
886 -- Give the Id a Global Name, and tidy its type
887   = Id.setIdType (globaliseId VanillaGlobal id) tidy_type
888   where
889     tidy_type = tidyTopType (idType id)
890 \end{code}
891
892 Here is the grand plan, implemented in tcUserStmt
893
894         What you type                   The IO [HValue] that hscStmt returns
895         -------------                   ------------------------------------
896         let pat = expr          ==>     let pat = expr in return [coerce HVal x, coerce HVal y, ...]
897                                         bindings: [x,y,...]
898
899         pat <- expr             ==>     expr >>= \ pat -> return [coerce HVal x, coerce HVal y, ...]
900                                         bindings: [x,y,...]
901
902         expr (of IO type)       ==>     expr >>= \ it -> return [coerce HVal it]
903           [NB: result not printed]      bindings: [it]
904           
905         expr (of non-IO type,   ==>     let it = expr in print it >> return [coerce HVal it]
906           result showable)              bindings: [it]
907
908         expr (of non-IO type, 
909           result not showable)  ==>     error
910
911
912 \begin{code}
913 ---------------------------
914 type PlanResult = ([Id], LHsExpr Id)
915 type Plan = TcM PlanResult
916
917 runPlans :: [Plan] -> TcM PlanResult
918 -- Try the plans in order.  If one fails (by raising an exn), try the next.
919 -- If one succeeds, take it.
920 runPlans []     = panic "runPlans"
921 runPlans [p]    = p
922 runPlans (p:ps) = tryTcLIE_ (runPlans ps) p
923
924 --------------------
925 mkPlan :: LStmt Name -> TcM PlanResult
926 mkPlan (L loc (ExprStmt expr _ _))      -- An expression typed at the prompt 
927   = do  { uniq <- newUnique             -- is treated very specially
928         ; let fresh_it  = itName uniq
929               the_bind  = L loc $ mkFunBind (L loc fresh_it) matches
930               matches   = [mkMatch [] expr emptyLocalBinds]
931               let_stmt  = L loc $ LetStmt (HsValBinds (ValBindsOut [(NonRecursive,unitBag the_bind)] []))
932               bind_stmt = L loc $ BindStmt (nlVarPat fresh_it) expr
933                                            (HsVar bindIOName) noSyntaxExpr 
934               print_it  = L loc $ ExprStmt (nlHsApp (nlHsVar printName) (nlHsVar fresh_it))
935                                            (HsVar thenIOName) placeHolderType
936
937         -- The plans are:
938         --      [it <- e; print it]     but not if it::()
939         --      [it <- e]               
940         --      [let it = e; print it]  
941         ; runPlans [    -- Plan A
942                     do { stuff@([it_id], _) <- tcGhciStmts [bind_stmt, print_it]
943                        ; it_ty <- zonkTcType (idType it_id)
944                        ; ifM (isUnitTy it_ty) failM
945                        ; return stuff },
946
947                         -- Plan B; a naked bind statment
948                     tcGhciStmts [bind_stmt],    
949
950                         -- Plan C; check that the let-binding is typeable all by itself.
951                         -- If not, fail; if so, try to print it.
952                         -- The two-step process avoids getting two errors: one from
953                         -- the expression itself, and one from the 'print it' part
954                         -- This two-step story is very clunky, alas
955                     do { checkNoErrs (tcGhciStmts [let_stmt]) 
956                                 --- checkNoErrs defeats the error recovery of let-bindings
957                        ; tcGhciStmts [let_stmt, print_it] }
958           ]}
959
960 mkPlan stmt@(L loc (BindStmt {}))
961   | [L _ v] <- collectLStmtBinders stmt         -- One binder, for a bind stmt 
962   = do  { let print_v  = L loc $ ExprStmt (nlHsApp (nlHsVar printName) (nlHsVar v))
963                                            (HsVar thenIOName) placeHolderType
964
965         ; print_bind_result <- doptM Opt_PrintBindResult
966         ; let print_plan = do
967                   { stuff@([v_id], _) <- tcGhciStmts [stmt, print_v]
968                   ; v_ty <- zonkTcType (idType v_id)
969                   ; ifM (isUnitTy v_ty || not (isTauTy v_ty)) failM
970                   ; return stuff }
971
972         -- The plans are:
973         --      [stmt; print v]         but not if v::()
974         --      [stmt]
975         ; runPlans ((if print_bind_result then [print_plan] else []) ++
976                     [tcGhciStmts [stmt]])
977         }
978
979 mkPlan stmt
980   = tcGhciStmts [stmt]
981
982 ---------------------------
983 tcGhciStmts :: [LStmt Name] -> TcM PlanResult
984 tcGhciStmts stmts
985  = do { ioTyCon <- tcLookupTyCon ioTyConName ;
986         ret_id  <- tcLookupId returnIOName ;            -- return @ IO
987         let {
988             io_ty     = mkTyConApp ioTyCon [] ;
989             ret_ty    = mkListTy unitTy ;
990             io_ret_ty = mkTyConApp ioTyCon [ret_ty] ;
991             tc_io_stmts stmts = tcStmts DoExpr (tcDoStmt io_ty) stmts 
992                                         (emptyRefinement, io_ret_ty) ;
993
994             names = map unLoc (collectLStmtsBinders stmts) ;
995
996                 -- mk_return builds the expression
997                 --      returnIO @ [()] [coerce () x, ..,  coerce () z]
998                 --
999                 -- Despite the inconvenience of building the type applications etc,
1000                 -- this *has* to be done in type-annotated post-typecheck form
1001                 -- because we are going to return a list of *polymorphic* values
1002                 -- coerced to type (). If we built a *source* stmt
1003                 --      return [coerce x, ..., coerce z]
1004                 -- then the type checker would instantiate x..z, and we wouldn't
1005                 -- get their *polymorphic* values.  (And we'd get ambiguity errs
1006                 -- if they were overloaded, since they aren't applied to anything.)
1007             mk_return ids = nlHsApp (nlHsTyApp ret_id [ret_ty]) 
1008                                     (noLoc $ ExplicitList unitTy (map mk_item ids)) ;
1009             mk_item id = nlHsApp (nlHsTyApp unsafeCoerceId [idType id, unitTy])
1010                                  (nlHsVar id) 
1011          } ;
1012
1013         -- OK, we're ready to typecheck the stmts
1014         traceTc (text "tcs 2") ;
1015         ((tc_stmts, ids), lie) <- getLIE $ tc_io_stmts stmts $ \ _ ->
1016                                            mappM tcLookupId names ;
1017                                         -- Look up the names right in the middle,
1018                                         -- where they will all be in scope
1019
1020         -- Simplify the context
1021         const_binds <- checkNoErrs (tcSimplifyInteractive lie) ;
1022                 -- checkNoErrs ensures that the plan fails if context redn fails
1023
1024         return (ids, mkHsDictLet const_binds $
1025                      noLoc (HsDo DoExpr tc_stmts (mk_return ids) io_ret_ty))
1026     }
1027 \end{code}
1028
1029
1030 tcRnExpr just finds the type of an expression
1031
1032 \begin{code}
1033 tcRnExpr :: HscEnv
1034          -> InteractiveContext
1035          -> LHsExpr RdrName
1036          -> IO (Maybe Type)
1037 tcRnExpr hsc_env ictxt rdr_expr
1038   = initTcPrintErrors hsc_env iNTERACTIVE $ 
1039     setInteractiveContext hsc_env ictxt $ do {
1040
1041     (rn_expr, fvs) <- rnLExpr rdr_expr ;
1042     failIfErrsM ;
1043
1044         -- Now typecheck the expression; 
1045         -- it might have a rank-2 type (e.g. :t runST)
1046     ((tc_expr, res_ty), lie)       <- getLIE (tcInferRho rn_expr) ;
1047     ((qtvs, _, dict_ids), lie_top) <- getLIE (tcSimplifyInfer smpl_doc (tyVarsOfType res_ty) lie)  ;
1048     tcSimplifyInteractive lie_top ;
1049     qtvs' <- mappM zonkQuantifiedTyVar qtvs ;
1050
1051     let { all_expr_ty = mkForAllTys qtvs' $
1052                         mkFunTys (map idType dict_ids)  $
1053                         res_ty } ;
1054     zonkTcType all_expr_ty
1055     }
1056   where
1057     smpl_doc = ptext SLIT("main expression")
1058 \end{code}
1059
1060 tcRnType just finds the kind of a type
1061
1062 \begin{code}
1063 tcRnType :: HscEnv
1064          -> InteractiveContext
1065          -> LHsType RdrName
1066          -> IO (Maybe Kind)
1067 tcRnType hsc_env ictxt rdr_type
1068   = initTcPrintErrors hsc_env iNTERACTIVE $ 
1069     setInteractiveContext hsc_env ictxt $ do {
1070
1071     rn_type <- rnLHsType doc rdr_type ;
1072     failIfErrsM ;
1073
1074         -- Now kind-check the type
1075     (ty', kind) <- kcHsType rn_type ;
1076     return kind
1077     }
1078   where
1079     doc = ptext SLIT("In GHCi input")
1080
1081 #endif /* GHCi */
1082 \end{code}
1083
1084
1085 %************************************************************************
1086 %*                                                                      *
1087         More GHCi stuff, to do with browsing and getting info
1088 %*                                                                      *
1089 %************************************************************************
1090
1091 \begin{code}
1092 #ifdef GHCI
1093 -- ASSUMES that the module is either in the HomePackageTable or is
1094 -- a package module with an interface on disk.  If neither of these is
1095 -- true, then the result will be an error indicating the interface
1096 -- could not be found.
1097 getModuleExports :: HscEnv -> Module -> IO (Messages, Maybe [AvailInfo])
1098 getModuleExports hsc_env mod
1099   = initTc hsc_env HsSrcFile iNTERACTIVE (tcGetModuleExports mod)
1100
1101 tcGetModuleExports :: Module -> TcM [AvailInfo]
1102 tcGetModuleExports mod = do
1103   let doc = ptext SLIT("context for compiling statements")
1104   iface <- initIfaceTcRn $ loadSysInterface doc mod
1105   loadOrphanModules (dep_orphs (mi_deps iface)) False 
1106                 -- Load any orphan-module interfaces,
1107                 -- so their instances are visible
1108   loadOrphanModules (dep_finsts (mi_deps iface)) True
1109                 -- Load any family instance-module interfaces,
1110                 -- so all family instances are visible
1111   ifaceExportNames (mi_exports iface)
1112
1113 tcRnLookupRdrName :: HscEnv -> RdrName -> IO (Maybe [Name])
1114 tcRnLookupRdrName hsc_env rdr_name 
1115   = initTcPrintErrors hsc_env iNTERACTIVE $ 
1116     setInteractiveContext hsc_env (hsc_IC hsc_env) $ 
1117     lookup_rdr_name rdr_name
1118
1119 lookup_rdr_name rdr_name = do {
1120         -- If the identifier is a constructor (begins with an
1121         -- upper-case letter), then we need to consider both
1122         -- constructor and type class identifiers.
1123     let { rdr_names = dataTcOccs rdr_name } ;
1124
1125         -- results :: [Either Messages Name]
1126     results <- mapM (tryTcErrs . lookupOccRn) rdr_names ;
1127
1128     traceRn (text "xx" <+> vcat [ppr rdr_names, ppr (map snd results)]);
1129         -- The successful lookups will be (Just name)
1130     let { (warns_s, good_names) = unzip [ (msgs, name) 
1131                                         | (msgs, Just name) <- results] ;
1132           errs_s = [msgs | (msgs, Nothing) <- results] } ;
1133
1134         -- Fail if nothing good happened, else add warnings
1135     if null good_names then
1136                 -- No lookup succeeded, so
1137                 -- pick the first error message and report it
1138                 -- ToDo: If one of the errors is "could be Foo.X or Baz.X",
1139                 --       while the other is "X is not in scope", 
1140                 --       we definitely want the former; but we might pick the latter
1141         do { addMessages (head errs_s) ; failM }
1142       else                      -- Add deprecation warnings
1143         mapM_ addMessages warns_s ;
1144     
1145     return good_names
1146  }
1147
1148
1149 tcRnLookupName :: HscEnv -> Name -> IO (Maybe TyThing)
1150 tcRnLookupName hsc_env name
1151   = initTcPrintErrors hsc_env iNTERACTIVE $ 
1152     setInteractiveContext hsc_env (hsc_IC hsc_env) $
1153     tcLookupGlobal name
1154
1155
1156 tcRnGetInfo :: HscEnv
1157             -> Name
1158             -> IO (Maybe (TyThing, Fixity, [Instance]))
1159
1160 -- Used to implemnent :info in GHCi
1161 --
1162 -- Look up a RdrName and return all the TyThings it might be
1163 -- A capitalised RdrName is given to us in the DataName namespace,
1164 -- but we want to treat it as *both* a data constructor 
1165 --  *and* as a type or class constructor; 
1166 -- hence the call to dataTcOccs, and we return up to two results
1167 tcRnGetInfo hsc_env name
1168   = initTcPrintErrors hsc_env iNTERACTIVE $ 
1169     let ictxt = hsc_IC hsc_env in
1170     setInteractiveContext hsc_env ictxt $ do
1171
1172         -- Load the interface for all unqualified types and classes
1173         -- That way we will find all the instance declarations
1174         -- (Packages have not orphan modules, and we assume that
1175         --  in the home package all relevant modules are loaded.)
1176     loadUnqualIfaces ictxt
1177
1178     thing  <- tcLookupGlobal name
1179     fixity <- lookupFixityRn name
1180     ispecs <- lookupInsts (icPrintUnqual ictxt) thing
1181     return (thing, fixity, ispecs)
1182
1183
1184 lookupInsts :: PrintUnqualified -> TyThing -> TcM [Instance]
1185 -- Filter the instances by the ones whose tycons (or clases resp) 
1186 -- are in scope unqualified.  Otherwise we list a whole lot too many!
1187 lookupInsts print_unqual (AClass cls)
1188   = do  { inst_envs <- tcGetInstEnvs
1189         ; return [ ispec
1190                  | ispec <- classInstances inst_envs cls
1191                  , plausibleDFun print_unqual (instanceDFunId ispec) ] }
1192
1193 lookupInsts print_unqual (ATyCon tc)
1194   = do  { eps <- getEps -- Load all instances for all classes that are
1195                         -- in the type environment (which are all the ones
1196                         -- we've seen in any interface file so far)
1197         ; (pkg_ie, home_ie) <- tcGetInstEnvs    -- Search all
1198         ; return [ ispec
1199                  | ispec <- instEnvElts home_ie ++ instEnvElts pkg_ie
1200                  , let dfun = instanceDFunId ispec
1201                  , relevant dfun
1202                  , plausibleDFun print_unqual dfun ] }
1203   where
1204     relevant df = tc_name `elemNameSet` tyClsNamesOfDFunHead (idType df)
1205     tc_name     = tyConName tc            
1206
1207 lookupInsts print_unqual other = return []
1208
1209 plausibleDFun print_unqual dfun -- Dfun involving only names that print unqualified
1210   = all ok (nameSetToList (tyClsNamesOfType (idType dfun)))
1211   where
1212     ok name | isBuiltInSyntax name = True
1213             | isExternalName name  = 
1214                 isNothing $ fst print_unqual (nameModule name) 
1215                                              (nameOccName name)
1216             | otherwise            = True
1217
1218 loadUnqualIfaces :: InteractiveContext -> TcM ()
1219 -- Load the home module for everything that is in scope unqualified
1220 -- This is so that we can accurately report the instances for 
1221 -- something
1222 loadUnqualIfaces ictxt
1223   = initIfaceTcRn $
1224     mapM_ (loadSysInterface doc) (moduleSetElts (mkModuleSet unqual_mods))
1225   where
1226     unqual_mods = [ nameModule name
1227                   | gre <- globalRdrEnvElts (ic_rn_gbl_env ictxt),
1228                     let name = gre_name gre,
1229                     not (isInternalName name),
1230                     isTcOcc (nameOccName name),  -- Types and classes only
1231                     unQualOK gre ]               -- In scope unqualified
1232     doc = ptext SLIT("Need interface for module whose export(s) are in scope unqualified")
1233 #endif /* GHCI */
1234 \end{code}
1235
1236 %************************************************************************
1237 %*                                                                      *
1238                 Degugging output
1239 %*                                                                      *
1240 %************************************************************************
1241
1242 \begin{code}
1243 rnDump :: SDoc -> TcRn ()
1244 -- Dump, with a banner, if -ddump-rn
1245 rnDump doc = do { dumpOptTcRn Opt_D_dump_rn (mkDumpDoc "Renamer" doc) }
1246
1247 tcDump :: TcGblEnv -> TcRn ()
1248 tcDump env
1249  = do { dflags <- getDOpts ;
1250
1251         -- Dump short output if -ddump-types or -ddump-tc
1252         ifM (dopt Opt_D_dump_types dflags || dopt Opt_D_dump_tc dflags)
1253             (dumpTcRn short_dump) ;
1254
1255         -- Dump bindings if -ddump-tc
1256         dumpOptTcRn Opt_D_dump_tc (mkDumpDoc "Typechecker" full_dump)
1257    }
1258   where
1259     short_dump = pprTcGblEnv env
1260     full_dump  = pprLHsBinds (tcg_binds env)
1261         -- NB: foreign x-d's have undefined's in their types; 
1262         --     hence can't show the tc_fords
1263
1264 tcCoreDump mod_guts
1265  = do { dflags <- getDOpts ;
1266         ifM (dopt Opt_D_dump_types dflags || dopt Opt_D_dump_tc dflags)
1267             (dumpTcRn (pprModGuts mod_guts)) ;
1268
1269         -- Dump bindings if -ddump-tc
1270         dumpOptTcRn Opt_D_dump_tc (mkDumpDoc "Typechecker" full_dump) }
1271   where
1272     full_dump = pprCoreBindings (mg_binds mod_guts)
1273
1274 -- It's unpleasant having both pprModGuts and pprModDetails here
1275 pprTcGblEnv :: TcGblEnv -> SDoc
1276 pprTcGblEnv (TcGblEnv { tcg_type_env  = type_env, 
1277                         tcg_insts     = insts, 
1278                         tcg_fam_insts = fam_insts, 
1279                         tcg_rules     = rules,
1280                         tcg_imports   = imports })
1281   = vcat [ ppr_types insts type_env
1282          , ppr_tycons fam_insts type_env
1283          , ppr_insts insts
1284          , ppr_fam_insts fam_insts
1285          , vcat (map ppr rules)
1286          , ppr_gen_tycons (typeEnvTyCons type_env)
1287          , ptext SLIT("Dependent modules:") <+> ppr (eltsUFM (imp_dep_mods imports))
1288          , ptext SLIT("Dependent packages:") <+> ppr (imp_dep_pkgs imports)]
1289
1290 pprModGuts :: ModGuts -> SDoc
1291 pprModGuts (ModGuts { mg_types = type_env,
1292                       mg_rules = rules })
1293   = vcat [ ppr_types [] type_env,
1294            ppr_rules rules ]
1295
1296 ppr_types :: [Instance] -> TypeEnv -> SDoc
1297 ppr_types insts type_env
1298   = text "TYPE SIGNATURES" $$ nest 4 (ppr_sigs ids)
1299   where
1300     dfun_ids = map instanceDFunId insts
1301     ids = [id | id <- typeEnvIds type_env, want_sig id]
1302     want_sig id | opt_PprStyle_Debug = True
1303                 | otherwise          = isLocalId id && 
1304                                        isExternalName (idName id) && 
1305                                        not (id `elem` dfun_ids)
1306         -- isLocalId ignores data constructors, records selectors etc.
1307         -- The isExternalName ignores local dictionary and method bindings
1308         -- that the type checker has invented.  Top-level user-defined things 
1309         -- have External names.
1310
1311 ppr_tycons :: [FamInst] -> TypeEnv -> SDoc
1312 ppr_tycons fam_insts type_env
1313   = text "TYPE CONSTRUCTORS" $$ nest 4 (ppr_tydecls tycons)
1314   where
1315     fi_tycons = map famInstTyCon fam_insts
1316     tycons = [tycon | tycon <- typeEnvTyCons type_env, want_tycon tycon]
1317     want_tycon tycon | opt_PprStyle_Debug = True
1318                      | otherwise          = not (isImplicitTyCon tycon) &&
1319                                             isExternalName (tyConName tycon) &&
1320                                             not (tycon `elem` fi_tycons)
1321
1322 ppr_insts :: [Instance] -> SDoc
1323 ppr_insts []     = empty
1324 ppr_insts ispecs = text "INSTANCES" $$ nest 2 (pprInstances ispecs)
1325
1326 ppr_fam_insts :: [FamInst] -> SDoc
1327 ppr_fam_insts []        = empty
1328 ppr_fam_insts fam_insts = 
1329   text "FAMILY INSTANCES" $$ nest 2 (pprFamInsts fam_insts)
1330
1331 ppr_sigs :: [Var] -> SDoc
1332 ppr_sigs ids
1333         -- Print type signatures; sort by OccName 
1334   = vcat (map ppr_sig (sortLe le_sig ids))
1335   where
1336     le_sig id1 id2 = getOccName id1 <= getOccName id2
1337     ppr_sig id = ppr id <+> dcolon <+> ppr (tidyTopType (idType id))
1338
1339 ppr_tydecls :: [TyCon] -> SDoc
1340 ppr_tydecls tycons
1341         -- Print type constructor info; sort by OccName 
1342   = vcat (map ppr_tycon (sortLe le_sig tycons))
1343   where
1344     le_sig tycon1 tycon2 = getOccName tycon1 <= getOccName tycon2
1345     ppr_tycon tycon 
1346       | isCoercionTyCon tycon = ptext SLIT("coercion") <+> ppr tycon
1347       | otherwise             = ppr (tyThingToIfaceDecl (ATyCon tycon))
1348
1349 ppr_rules :: [CoreRule] -> SDoc
1350 ppr_rules [] = empty
1351 ppr_rules rs = vcat [ptext SLIT("{-# RULES"),
1352                       nest 4 (pprRules rs),
1353                       ptext SLIT("#-}")]
1354
1355 ppr_gen_tycons []  = empty
1356 ppr_gen_tycons tcs = vcat [ptext SLIT("Tycons with generics:"),
1357                            nest 2 (fsep (map ppr (filter tyConHasGenerics tcs)))]
1358 \end{code}