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