2 % (c) The University of Glasgow 2006
3 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
5 \section[TcModule]{Typechecking a whole module}
9 -- The above warning supression flag is a temporary kludge.
10 -- While working on this module you are encouraged to remove it and fix
11 -- any warnings in the module. See
12 -- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings
17 tcRnStmt, tcRnExpr, tcRnType,
30 import {-# SOURCE #-} TcSplice ( tcSpliceDecls )
59 import TcUnify ( withBox )
96 import {- Kind parts of -} Type
98 import Foreign.Ptr( Ptr )
107 import Data.Maybe ( isJust )
109 #include "HsVersions.h"
114 %************************************************************************
116 Typecheck and rename a module
118 %************************************************************************
124 -> Bool -- True <=> save renamed syntax
125 -> Located (HsModule RdrName)
126 -> IO (Messages, Maybe TcGblEnv)
128 tcRnModule hsc_env hsc_src save_rn_syntax
129 (L loc (HsModule maybe_mod export_ies
130 import_decls local_decls mod_deprec
131 module_info maybe_doc))
132 = do { showPass (hsc_dflags hsc_env) "Renamer/typechecker" ;
134 let { this_pkg = thisPackage (hsc_dflags hsc_env) ;
135 this_mod = case maybe_mod of
136 Nothing -> mAIN -- 'module M where' is omitted
137 Just (L _ mod) -> mkModule this_pkg mod } ;
140 initTc hsc_env hsc_src save_rn_syntax this_mod $
142 do { -- Deal with imports;
143 tcg_env <- tcRnImports hsc_env this_mod import_decls ;
144 setGblEnv tcg_env $ do {
146 -- Load the hi-boot interface for this module, if any
147 -- We do this now so that the boot_names can be passed
148 -- to tcTyAndClassDecls, because the boot_names are
149 -- automatically considered to be loop breakers
151 -- Do this *after* tcRnImports, so that we know whether
152 -- a module that we import imports us; and hence whether to
153 -- look for a hi-boot file
154 boot_iface <- tcHiBootIface hsc_src this_mod ;
156 -- Rename and type check the declarations
157 traceRn (text "rn1a") ;
158 tcg_env <- if isHsBoot hsc_src then
159 tcRnHsBootDecls local_decls
161 tcRnSrcDecls boot_iface local_decls ;
162 setGblEnv tcg_env $ do {
164 -- Report the use of any deprecated things
165 -- We do this *before* processsing the export list so
166 -- that we don't bleat about re-exporting a deprecated
167 -- thing (especially via 'module Foo' export item)
168 -- That is, only uses in the *body* of the module are complained about
169 traceRn (text "rn3") ;
170 failIfErrsM ; -- finishDeprecations crashes sometimes
171 -- as a result of typechecker repairs (e.g. unboundNames)
172 tcg_env <- finishDeprecations (hsc_dflags hsc_env) mod_deprec tcg_env ;
174 -- Process the export list
175 traceRn (text "rn4a: before exports");
176 tcg_env <- rnExports (isJust maybe_mod) export_ies tcg_env ;
177 traceRn (text "rn4b: after exportss") ;
179 -- Compare the hi-boot iface (if any) with the real thing
180 -- Must be done after processing the exports
181 tcg_env <- checkHiBootIface tcg_env boot_iface ;
183 -- Make the new type env available to stuff slurped from interface files
184 -- Must do this after checkHiBootIface, because the latter might add new
185 -- bindings for boot_dfuns, which may be mentioned in imported unfoldings
186 writeMutVar (tcg_type_env_var tcg_env) (tcg_type_env tcg_env) ;
188 -- Rename the Haddock documentation
189 tcg_env <- rnHaddock module_info maybe_doc tcg_env ;
191 -- Report unused names
192 reportUnusedNames export_ies tcg_env ;
194 -- Dump output and return
201 %************************************************************************
205 %************************************************************************
208 tcRnImports :: HscEnv -> Module -> [LImportDecl RdrName] -> TcM TcGblEnv
209 tcRnImports hsc_env this_mod import_decls
210 = do { (rn_imports, rdr_env, imports,hpc_info) <- rnImports import_decls ;
212 ; let { dep_mods :: ModuleNameEnv (ModuleName, IsBootInterface)
213 ; dep_mods = imp_dep_mods imports
215 -- We want instance declarations from all home-package
216 -- modules below this one, including boot modules, except
217 -- ourselves. The 'except ourselves' is so that we don't
218 -- get the instances from this module's hs-boot file
219 ; want_instances :: ModuleName -> Bool
220 ; want_instances mod = mod `elemUFM` dep_mods
221 && mod /= moduleName this_mod
222 ; (home_insts, home_fam_insts) = hptInstances hsc_env
226 -- Record boot-file info in the EPS, so that it's
227 -- visible to loadHiBootInterface in tcRnSrcDecls,
228 -- and any other incrementally-performed imports
229 ; updateEps_ (\eps -> eps { eps_is_boot = dep_mods }) ;
231 -- Update the gbl env
232 ; updGblEnv ( \ gbl ->
234 tcg_rdr_env = plusOccEnv (tcg_rdr_env gbl) rdr_env,
235 tcg_imports = tcg_imports gbl `plusImportAvails` imports,
236 tcg_rn_imports = fmap (const rn_imports) (tcg_rn_imports gbl),
237 tcg_inst_env = extendInstEnvList (tcg_inst_env gbl) home_insts,
238 tcg_fam_inst_env = extendFamInstEnvList (tcg_fam_inst_env gbl)
243 ; traceRn (text "rn1" <+> ppr (imp_dep_mods imports))
244 -- Fail if there are any errors so far
245 -- The error printing (if needed) takes advantage
246 -- of the tcg_env we have now set
247 -- ; traceIf (text "rdr_env: " <+> ppr rdr_env)
250 -- Load any orphan-module and family instance-module
251 -- interfaces, so that their rules and instance decls will be
253 ; loadOrphanModules (imp_orphs imports) False
254 ; loadOrphanModules (imp_finsts imports) True
256 -- Check type-familily consistency
257 ; traceRn (text "rn1: checking family instance consistency")
258 ; let { dir_imp_mods = moduleEnvKeys
261 ; checkFamInstConsistency (imp_finsts imports) dir_imp_mods ;
267 %************************************************************************
269 Type-checking external-core modules
271 %************************************************************************
274 tcRnExtCore :: HscEnv
276 -> IO (Messages, Maybe ModGuts)
277 -- Nothing => some error occurred
279 tcRnExtCore hsc_env (HsExtCore this_mod decls src_binds)
280 -- The decls are IfaceDecls; all names are original names
281 = do { showPass (hsc_dflags hsc_env) "Renamer/typechecker" ;
283 initTc hsc_env ExtCoreFile False this_mod $ do {
285 let { ldecls = map noLoc decls } ;
287 -- bring the type and class decls into scope
288 -- ToDo: check that this doesn't need to extract the val binds.
289 -- It seems that only the type and class decls need to be in scope below because
290 -- (a) tcTyAndClassDecls doesn't need the val binds, and
291 -- (b) tcExtCoreBindings doesn't need anything
292 -- (in fact, it might not even need to be in the scope of
293 -- this tcg_env at all)
294 avails <- getLocalNonValBinders (mkFakeGroup ldecls) ;
295 tc_envs <- extendGlobalRdrEnvRn False avails
296 emptyFsEnv {- no fixity decls -} ;
298 setEnvs tc_envs $ do {
300 rn_decls <- checkNoErrs $ rnTyClDecls ldecls ;
302 -- Dump trace of renaming part
303 rnDump (ppr rn_decls) ;
305 -- Typecheck them all together so that
306 -- any mutually recursive types are done right
307 tcg_env <- tcTyAndClassDecls emptyModDetails rn_decls ;
308 -- Make the new type env available to stuff slurped from interface files
310 setGblEnv tcg_env $ do {
312 -- Now the core bindings
313 core_binds <- initIfaceExtCore (tcExtCoreBindings src_binds) ;
317 bndrs = bindersOfBinds core_binds ;
318 my_exports = map (Avail . idName) bndrs ;
319 -- ToDo: export the data types also?
321 final_type_env = extendTypeEnvWithIds (tcg_type_env tcg_env) bndrs ;
323 mod_guts = ModGuts { mg_module = this_mod,
325 mg_used_names = emptyNameSet, -- ToDo: compute usage
326 mg_dir_imps = emptyModuleEnv, -- ??
327 mg_deps = noDependencies, -- ??
328 mg_exports = my_exports,
329 mg_types = final_type_env,
330 mg_insts = tcg_insts tcg_env,
331 mg_fam_insts = tcg_fam_insts tcg_env,
332 mg_inst_env = tcg_inst_env tcg_env,
333 mg_fam_inst_env = tcg_fam_inst_env tcg_env,
335 mg_binds = core_binds,
338 mg_rdr_env = emptyGlobalRdrEnv,
339 mg_fix_env = emptyFixityEnv,
340 mg_deprecs = NoDeprecs,
341 mg_foreign = NoStubs,
342 mg_hpc_info = emptyHpcInfo False,
343 mg_modBreaks = emptyModBreaks,
344 mg_vect_info = noVectInfo
347 tcCoreDump mod_guts ;
352 mkFakeGroup decls -- Rather clumsy; lots of unused fields
353 = emptyRdrGroup { hs_tyclds = decls }
357 %************************************************************************
359 Type-checking the top level of a module
361 %************************************************************************
364 tcRnSrcDecls :: ModDetails -> [LHsDecl RdrName] -> TcM TcGblEnv
365 -- Returns the variables free in the decls
366 -- Reason: solely to report unused imports and bindings
367 tcRnSrcDecls boot_iface decls
368 = do { -- Do all the declarations
369 (tc_envs, lie) <- getLIE $ tc_rn_src_decls boot_iface decls ;
371 -- Finish simplifying class constraints
373 -- tcSimplifyTop deals with constant or ambiguous InstIds.
374 -- How could there be ambiguous ones? They can only arise if a
375 -- top-level decl falls under the monomorphism restriction
376 -- and no subsequent decl instantiates its type.
378 -- We do this after checkMain, so that we use the type info
379 -- thaat checkMain adds
381 -- We do it with both global and local env in scope:
382 -- * the global env exposes the instances to tcSimplifyTop
383 -- * the local env exposes the local Ids to tcSimplifyTop,
384 -- so that we get better error messages (monomorphism restriction)
385 traceTc (text "Tc8") ;
386 inst_binds <- setEnvs tc_envs (tcSimplifyTop lie) ;
388 -- Backsubstitution. This must be done last.
389 -- Even tcSimplifyTop may do some unification.
390 traceTc (text "Tc9") ;
391 let { (tcg_env, _) = tc_envs
392 ; TcGblEnv { tcg_type_env = type_env, tcg_binds = binds,
393 tcg_rules = rules, tcg_fords = fords } = tcg_env
394 ; all_binds = binds `unionBags` inst_binds } ;
396 failIfErrsM ; -- Don't zonk if there have been errors
397 -- It's a waste of time; and we may get debug warnings
398 -- about strangely-typed TyCons!
400 (bind_ids, binds', fords', rules') <- zonkTopDecls all_binds rules fords ;
402 let { final_type_env = extendTypeEnvWithIds type_env bind_ids
403 ; tcg_env' = tcg_env { tcg_type_env = final_type_env,
406 tcg_fords = fords' } } ;
408 return (tcg_env' { tcg_binds = tcg_binds tcg_env' })
411 tc_rn_src_decls :: ModDetails -> [LHsDecl RdrName] -> TcM (TcGblEnv, TcLclEnv)
412 -- Loops around dealing with each top level inter-splice group
413 -- in turn, until it's dealt with the entire module
414 tc_rn_src_decls boot_details ds
415 = do { let { (first_group, group_tail) = findSplice ds } ;
416 -- If ds is [] we get ([], Nothing)
418 -- Deal with decls up to, but not including, the first splice
419 (tcg_env, rn_decls) <- rnTopSrcDecls first_group ;
420 -- rnTopSrcDecls fails if there are any errors
422 (tcg_env, tcl_env) <- setGblEnv tcg_env $
423 tcTopSrcDecls boot_details rn_decls ;
425 -- If there is no splice, we're nearly done
426 setEnvs (tcg_env, tcl_env) $
428 Nothing -> do { tcg_env <- checkMain ; -- Check for `main'
429 return (tcg_env, tcl_env)
432 -- If there's a splice, we must carry on
433 Just (SpliceDecl splice_expr, rest_ds) -> do {
435 failWithTc (text "Can't do a top-level splice; need a bootstrapped compiler")
438 -- Rename the splice expression, and get its supporting decls
439 (rn_splice_expr, splice_fvs) <- checkNoErrs (rnLExpr splice_expr) ;
440 -- checkNoErrs: don't typecheck if renaming failed
441 rnDump (ppr rn_splice_expr) ;
443 -- Execute the splice
444 spliced_decls <- tcSpliceDecls rn_splice_expr ;
446 -- Glue them on the front of the remaining decls and loop
447 setGblEnv (tcg_env `addTcgDUs` usesOnly splice_fvs) $
448 tc_rn_src_decls boot_details (spliced_decls ++ rest_ds)
453 %************************************************************************
455 Compiling hs-boot source files, and
456 comparing the hi-boot interface with the real thing
458 %************************************************************************
461 tcRnHsBootDecls :: [LHsDecl RdrName] -> TcM TcGblEnv
462 tcRnHsBootDecls decls
463 = do { let { (first_group, group_tail) = findSplice decls }
466 Just stuff -> spliceInHsBootErr stuff
469 -- Rename the declarations
470 ; (tcg_env, rn_group) <- rnTopSrcDecls first_group
471 ; setGblEnv tcg_env $ do {
473 -- Todo: check no foreign decls, no rules, no default decls
475 -- Typecheck type/class decls
476 ; traceTc (text "Tc2")
477 ; let tycl_decls = hs_tyclds rn_group
478 ; tcg_env <- tcTyAndClassDecls emptyModDetails tycl_decls
479 ; setGblEnv tcg_env $ do {
481 -- Typecheck instance decls
482 ; traceTc (text "Tc3")
483 ; (tcg_env, inst_infos, _deriv_binds)
484 <- tcInstDecls1 tycl_decls (hs_instds rn_group) (hs_derivds rn_group)
485 ; setGblEnv tcg_env $ do {
487 -- Typecheck value declarations
488 ; traceTc (text "Tc5")
489 ; val_ids <- tcHsBootSigs (hs_valds rn_group)
492 -- No simplification or zonking to do
493 ; traceTc (text "Tc7a")
494 ; gbl_env <- getGblEnv
496 -- Make the final type-env
497 -- Include the dfun_ids so that their type sigs
498 -- are written into the interface file
499 ; let { type_env0 = tcg_type_env gbl_env
500 ; type_env1 = extendTypeEnvWithIds type_env0 val_ids
501 ; type_env2 = extendTypeEnvWithIds type_env1 dfun_ids
502 ; dfun_ids = map iDFunId inst_infos }
503 ; return (gbl_env { tcg_type_env = type_env2 })
506 spliceInHsBootErr (SpliceDecl (L loc _), _)
507 = addErrAt loc (ptext (sLit "Splices are not allowed in hs-boot files"))
510 Once we've typechecked the body of the module, we want to compare what
511 we've found (gathered in a TypeEnv) with the hi-boot details (if any).
514 checkHiBootIface :: TcGblEnv -> ModDetails -> TcM TcGblEnv
515 -- Compare the hi-boot file for this module (if there is one)
516 -- with the type environment we've just come up with
517 -- In the common case where there is no hi-boot file, the list
518 -- of boot_names is empty.
520 -- The bindings we return give bindings for the dfuns defined in the
521 -- hs-boot file, such as $fbEqT = $fEqT
524 tcg_env@(TcGblEnv { tcg_src = hs_src, tcg_binds = binds,
525 tcg_insts = local_insts, tcg_fam_insts = local_fam_insts,
526 tcg_type_env = local_type_env, tcg_exports = local_exports })
527 (ModDetails { md_insts = boot_insts, md_fam_insts = boot_fam_insts,
528 md_types = boot_type_env, md_exports = boot_exports })
529 | isHsBoot hs_src -- Current module is already a hs-boot file!
533 = do { traceTc (text "checkHiBootIface" <+> (ppr boot_type_env $$ ppr boot_insts $$
536 -- Check the exports of the boot module, one by one
537 ; mapM_ check_export boot_exports
539 -- Check instance declarations
540 ; mb_dfun_prs <- mapM check_inst boot_insts
541 ; let tcg_env' = tcg_env { tcg_binds = binds `unionBags` dfun_binds,
542 tcg_type_env = extendTypeEnvWithIds local_type_env boot_dfuns }
543 dfun_prs = catMaybes mb_dfun_prs
544 boot_dfuns = map fst dfun_prs
545 dfun_binds = listToBag [ noLoc $ VarBind boot_dfun (nlHsVar dfun)
546 | (boot_dfun, dfun) <- dfun_prs ]
548 -- Check for no family instances
549 ; unless (null boot_fam_insts) $
550 panic ("TcRnDriver.checkHiBootIface: Cannot handle family " ++
551 "instances in boot files yet...")
552 -- FIXME: Why? The actual comparison is not hard, but what would
553 -- be the equivalent to the dfun bindings returned for class
554 -- instances? We can't easily equate tycons...
559 check_export boot_avail -- boot_avail is exported by the boot iface
560 | name `elem` dfun_names = return ()
561 | isWiredInName name = return () -- No checking for wired-in names. In particular,
562 -- 'error' is handled by a rather gross hack
563 -- (see comments in GHC.Err.hs-boot)
565 -- Check that the actual module exports the same thing
566 | not (null missing_names)
567 = addErrAt (nameSrcSpan (head missing_names))
568 (missingBootThing (head missing_names) "exported by")
570 -- If the boot module does not *define* the thing, we are done
571 -- (it simply re-exports it, and names match, so nothing further to do)
572 | isNothing mb_boot_thing = return ()
574 -- Check that the actual module also defines the thing, and
575 -- then compare the definitions
576 | Just real_thing <- lookupTypeEnv local_type_env name,
577 Just boot_thing <- mb_boot_thing
578 = when (not (checkBootDecl boot_thing real_thing))
579 $ addErrAt (nameSrcSpan (getName boot_thing))
580 (let boot_decl = tyThingToIfaceDecl
581 (fromJust mb_boot_thing)
582 real_decl = tyThingToIfaceDecl real_thing
583 in bootMisMatch real_thing boot_decl real_decl)
586 = addErrTc (missingBootThing name "defined in")
588 name = availName boot_avail
589 mb_boot_thing = lookupTypeEnv boot_type_env name
590 missing_names = case lookupNameEnv local_export_env name of
592 Just avail -> availNames boot_avail `minusList` availNames avail
594 dfun_names = map getName boot_insts
596 local_export_env :: NameEnv AvailInfo
597 local_export_env = availsToNameEnv local_exports
599 check_inst :: Instance -> TcM (Maybe (Id, Id))
600 -- Returns a pair of the boot dfun in terms of the equivalent real dfun
602 = case [dfun | inst <- local_insts,
603 let dfun = instanceDFunId inst,
604 idType dfun `tcEqType` boot_inst_ty ] of
605 [] -> do { addErrTc (instMisMatch boot_inst); return Nothing }
606 (dfun:_) -> return (Just (local_boot_dfun, dfun))
608 boot_dfun = instanceDFunId boot_inst
609 boot_inst_ty = idType boot_dfun
610 local_boot_dfun = Id.mkExportedLocalId (idName boot_dfun) boot_inst_ty
613 -- This has to compare the TyThing from the .hi-boot file to the TyThing
614 -- in the current source file. We must be careful to allow alpha-renaming
615 -- where appropriate, and also the boot declaration is allowed to omit
616 -- constructors and class methods.
618 -- See rnfail055 for a good test of this stuff.
620 checkBootDecl :: TyThing -> TyThing -> Bool
622 checkBootDecl (AnId id1) (AnId id2)
624 (idType id1 `tcEqType` idType id2)
626 checkBootDecl (ATyCon tc1) (ATyCon tc2)
627 | isSynTyCon tc1 && isSynTyCon tc2
629 let tvs1 = tyConTyVars tc1; tvs2 = tyConTyVars tc2
630 env = rnBndrs2 env0 tvs1 tvs2
632 eqSynRhs (OpenSynTyCon k1 _) (OpenSynTyCon k2 _)
633 = tcEqTypeX env k1 k2
634 eqSynRhs (SynonymTyCon t1) (SynonymTyCon t2)
635 = tcEqTypeX env t1 t2
637 equalLength tvs1 tvs2 &&
638 eqSynRhs (synTyConRhs tc1) (synTyConRhs tc2)
640 | isAlgTyCon tc1 && isAlgTyCon tc2
642 eqListBy tcEqPred (tyConStupidTheta tc1) (tyConStupidTheta tc2)
643 && eqAlgRhs (algTyConRhs tc1) (algTyConRhs tc2)
645 | isForeignTyCon tc1 && isForeignTyCon tc2
646 = tyConExtName tc1 == tyConExtName tc2
648 env0 = mkRnEnv2 emptyInScopeSet
650 eqAlgRhs AbstractTyCon _ = True
651 eqAlgRhs OpenTyCon{} OpenTyCon{} = True
652 eqAlgRhs tc1@DataTyCon{} tc2@DataTyCon{} =
653 eqListBy eqCon (data_cons tc1) (data_cons tc2)
654 eqAlgRhs tc1@NewTyCon{} tc2@NewTyCon{} =
655 eqCon (data_con tc1) (data_con tc2)
659 = dataConName c1 == dataConName c2
660 && dataConIsInfix c1 == dataConIsInfix c2
661 && dataConStrictMarks c1 == dataConStrictMarks c2
662 && dataConFieldLabels c1 == dataConFieldLabels c2
663 && let tvs1 = dataConUnivTyVars c1 ++ dataConExTyVars c1
664 tvs2 = dataConUnivTyVars c2 ++ dataConExTyVars c2
665 env = rnBndrs2 env0 tvs1 tvs2
667 equalLength tvs1 tvs2 &&
668 eqListBy (tcEqPredX env)
669 (dataConEqTheta c1 ++ dataConDictTheta c1)
670 (dataConEqTheta c2 ++ dataConDictTheta c2) &&
671 eqListBy (tcEqTypeX env)
672 (dataConOrigArgTys c1)
673 (dataConOrigArgTys c2)
675 checkBootDecl (AClass c1) (AClass c2)
677 (clas_tyvars1, clas_fds1, sc_theta1, _, _, op_stuff1)
678 = classExtraBigSig c1
679 (clas_tyvars2, clas_fds2, sc_theta2, _, _, op_stuff2)
680 = classExtraBigSig c2
682 env0 = mkRnEnv2 emptyInScopeSet
683 env = rnBndrs2 env0 clas_tyvars1 clas_tyvars2
685 eqSig (id1, def_meth1) (id2, def_meth2)
686 = idName id1 == idName id2 &&
687 tcEqTypeX env op_ty1 op_ty2
689 (_, rho_ty1) = splitForAllTys (idType id1)
690 op_ty1 = funResultTy rho_ty1
691 (_, rho_ty2) = splitForAllTys (idType id2)
692 op_ty2 = funResultTy rho_ty2
694 eqFD (as1,bs1) (as2,bs2) =
695 eqListBy (tcEqTypeX env) (mkTyVarTys as1) (mkTyVarTys as2) &&
696 eqListBy (tcEqTypeX env) (mkTyVarTys bs1) (mkTyVarTys bs2)
698 equalLength clas_tyvars1 clas_tyvars2 &&
699 eqListBy eqFD clas_fds1 clas_fds2 &&
700 (null sc_theta1 && null op_stuff1
702 eqListBy (tcEqPredX env) sc_theta1 sc_theta2 &&
703 eqListBy eqSig op_stuff1 op_stuff2)
705 checkBootDecl (ADataCon dc1) (ADataCon dc2)
706 = pprPanic "checkBootDecl" (ppr dc1)
708 checkBootDecl _ _ = False -- probably shouldn't happen
711 missingBootThing thing what
712 = ppr thing <+> ptext (sLit "is exported by the hs-boot file, but not")
713 <+> text what <+> ptext (sLit "the module")
715 bootMisMatch thing boot_decl real_decl
716 = vcat [ppr thing <+> ptext (sLit "has conflicting definitions in the module and its hs-boot file"),
717 ptext (sLit "Main module:") <+> ppr real_decl,
718 ptext (sLit "Boot file: ") <+> ppr boot_decl]
722 2 (ptext (sLit "is defined in the hs-boot file, but not in the module itself"))
726 %************************************************************************
728 Type-checking the top level of a module
730 %************************************************************************
732 tcRnGroup takes a bunch of top-level source-code declarations, and
734 * gets supporting declarations from interface files
737 * and augments the TcGblEnv with the results
739 In Template Haskell it may be called repeatedly for each group of
740 declarations. It expects there to be an incoming TcGblEnv in the
741 monad; it augments it and returns the new TcGblEnv.
744 ------------------------------------------------
745 rnTopSrcDecls :: HsGroup RdrName -> TcM (TcGblEnv, HsGroup Name)
746 -- Fails if there are any errors
748 = do { -- Rename the source decls (with no shadowing; error on duplicates)
749 (tcg_env, rn_decls) <- checkNoErrs $ rnSrcDecls False group ;
751 -- save the renamed syntax, if we want it
753 | Just grp <- tcg_rn_decls tcg_env
754 = tcg_env{ tcg_rn_decls = Just (appendGroups grp rn_decls) }
758 -- Dump trace of renaming part
759 rnDump (ppr rn_decls) ;
761 return (tcg_env', rn_decls)
764 ------------------------------------------------
765 tcTopSrcDecls :: ModDetails -> HsGroup Name -> TcM (TcGblEnv, TcLclEnv)
766 tcTopSrcDecls boot_details
767 (HsGroup { hs_tyclds = tycl_decls,
768 hs_instds = inst_decls,
769 hs_derivds = deriv_decls,
770 hs_fords = foreign_decls,
771 hs_defds = default_decls,
772 hs_ruleds = rule_decls,
773 hs_valds = val_binds })
774 = do { -- Type-check the type and class decls, and all imported decls
775 -- The latter come in via tycl_decls
776 traceTc (text "Tc2") ;
778 tcg_env <- tcTyAndClassDecls boot_details tycl_decls ;
779 -- If there are any errors, tcTyAndClassDecls fails here
781 -- Make these type and class decls available to stuff slurped from interface files
782 writeMutVar (tcg_type_env_var tcg_env) (tcg_type_env tcg_env) ;
785 setGblEnv tcg_env $ do {
786 -- Source-language instances, including derivings,
787 -- and import the supporting declarations
788 traceTc (text "Tc3") ;
789 (tcg_env, inst_infos, deriv_binds)
790 <- tcInstDecls1 tycl_decls inst_decls deriv_decls;
791 setGblEnv tcg_env $ do {
793 -- Foreign import declarations next. No zonking necessary
794 -- here; we can tuck them straight into the global environment.
795 traceTc (text "Tc4") ;
796 (fi_ids, fi_decls) <- tcForeignImports foreign_decls ;
797 tcExtendGlobalValEnv fi_ids $ do {
799 -- Default declarations
800 traceTc (text "Tc4a") ;
801 default_tys <- tcDefaults default_decls ;
802 updGblEnv (\gbl -> gbl { tcg_default = default_tys }) $ do {
804 -- Value declarations next
805 -- We also typecheck any extra binds that came out
806 -- of the "deriving" process (deriv_binds)
807 traceTc (text "Tc5") ;
808 (tc_val_binds, tcl_env) <- tcTopBinds val_binds ;
809 setLclTypeEnv tcl_env $ do {
811 -- Now GHC-generated derived bindings and generics.
812 -- Do not generate warnings from compiler-generated code.
813 (tc_deriv_binds, tcl_env) <- discardWarnings $
814 tcTopBinds deriv_binds ;
816 -- Second pass over class and instance declarations,
817 traceTc (text "Tc6") ;
818 (inst_binds, tcl_env) <- setLclTypeEnv tcl_env $ tcInstDecls2 tycl_decls inst_infos ;
819 showLIE (text "after instDecls2") ;
822 -- They need to be zonked, so we return them
823 traceTc (text "Tc7") ;
824 (foe_binds, foe_decls) <- tcForeignExports foreign_decls ;
827 rules <- tcRules rule_decls ;
830 traceTc (text "Tc7a") ;
831 tcg_env <- getGblEnv ;
832 let { all_binds = tc_val_binds `unionBags`
833 tc_deriv_binds `unionBags`
834 inst_binds `unionBags`
837 -- Extend the GblEnv with the (as yet un-zonked)
838 -- bindings, rules, foreign decls
839 tcg_env' = tcg_env { tcg_binds = tcg_binds tcg_env `unionBags` all_binds,
840 tcg_rules = tcg_rules tcg_env ++ rules,
841 tcg_fords = tcg_fords tcg_env ++ foe_decls ++ fi_decls } } ;
842 return (tcg_env', tcl_env)
847 %************************************************************************
851 %************************************************************************
854 checkMain :: TcM TcGblEnv
855 -- If we are in module Main, check that 'main' is defined.
857 = do { tcg_env <- getGblEnv ;
859 check_main dflags tcg_env
862 check_main dflags tcg_env
864 = traceTc (text "checkMain not" <+> ppr main_mod <+> ppr mod) >>
868 = do { mb_main <- lookupSrcOcc_maybe main_fn
869 -- Check that 'main' is in scope
870 -- It might be imported from another module!
872 Nothing -> do { traceTc (text "checkMain fail" <+> ppr main_mod <+> ppr main_fn)
877 { traceTc (text "checkMain found" <+> ppr main_mod <+> ppr main_fn)
878 ; let loc = srcLocSpan (getSrcLoc main_name)
879 ; ioTyCon <- tcLookupTyCon ioTyConName
880 ; (main_expr, res_ty)
881 <- addErrCtxt mainCtxt $
882 withBox liftedTypeKind $ \res_ty ->
883 tcMonoExpr (L loc (HsVar main_name)) (mkTyConApp ioTyCon [res_ty])
885 -- See Note [Root-main Id]
886 -- Construct the binding
887 -- :Main.main :: IO res_ty = runMainIO res_ty main
888 ; run_main_id <- tcLookupId runMainIOName
889 ; let { root_main_name = mkExternalName rootMainKey rOOT_MAIN
890 (mkVarOccFS (fsLit "main"))
891 (getSrcSpan main_name)
892 ; root_main_id = Id.mkExportedLocalId root_main_name
893 (mkTyConApp ioTyCon [res_ty])
894 ; co = mkWpTyApps [res_ty]
895 ; rhs = nlHsApp (mkLHsWrap co (nlHsVar run_main_id)) main_expr
896 ; main_bind = noLoc (VarBind root_main_id rhs) }
898 ; return (tcg_env { tcg_binds = tcg_binds tcg_env
900 tcg_dus = tcg_dus tcg_env
901 `plusDU` usesOnly (unitFV main_name)
902 -- Record the use of 'main', so that we don't
903 -- complain about it being defined but not used
907 mod = tcg_mod tcg_env
908 main_mod = mainModIs dflags
909 main_is_flag = mainFunIs dflags
911 main_fn = case main_is_flag of
912 Just fn -> mkRdrUnqual (mkVarOccFS (mkFastString fn))
913 Nothing -> main_RDR_Unqual
915 complain_no_main | ghcLink dflags == LinkInMemory = return ()
916 | otherwise = failWithTc noMainMsg
917 -- In interactive mode, don't worry about the absence of 'main'
918 -- In other modes, fail altogether, so that we don't go on
919 -- and complain a second time when processing the export list.
921 mainCtxt = ptext (sLit "When checking the type of the") <+> pp_main_fn
922 noMainMsg = ptext (sLit "The") <+> pp_main_fn
923 <+> ptext (sLit "is not defined in module") <+> quotes (ppr main_mod)
924 pp_main_fn | isJust main_is_flag = ptext (sLit "main function") <+> quotes (ppr main_fn)
925 | otherwise = ptext (sLit "function") <+> quotes (ppr main_fn)
930 The function that the RTS invokes is always :Main.main, which we call
931 root_main_id. (Because GHC allows the user to have a module not
932 called Main as the main module, we can't rely on the main function
933 being called "Main.main". That's why root_main_id has a fixed module
936 This is unusual: it's a LocalId whose Name has a Module from another
937 module. Tiresomely, we must filter it out again in MkIface, les we
938 get two defns for 'main' in the interface file!
941 %*********************************************************
945 %*********************************************************
949 setInteractiveContext :: HscEnv -> InteractiveContext -> TcRn a -> TcRn a
950 setInteractiveContext hsc_env icxt thing_inside
951 = let -- Initialise the tcg_inst_env with instances from all home modules.
952 -- This mimics the more selective call to hptInstances in tcRnModule.
953 (home_insts, home_fam_insts) = hptInstances hsc_env (\mod -> True)
955 updGblEnv (\env -> env {
956 tcg_rdr_env = ic_rn_gbl_env icxt,
957 tcg_inst_env = extendInstEnvList (tcg_inst_env env) home_insts,
958 tcg_fam_inst_env = extendFamInstEnvList (tcg_fam_inst_env env)
962 tcExtendGhciEnv (ic_tmp_ids icxt) $
963 -- tcExtendGhciEnv does lots:
964 -- - it extends the local type env (tcl_env) with the given Ids,
965 -- - it extends the local rdr env (tcl_rdr) with the Names from
967 -- - it adds the free tyvars of the Ids to the tcl_tyvars
970 -- later ids in ic_tmp_ids must shadow earlier ones with the same
971 -- OccName, and tcExtendIdEnv implements this behaviour.
973 do { traceTc (text "setIC" <+> ppr (ic_tmp_ids icxt))
980 -> InteractiveContext
982 -> IO (Maybe ([Id], LHsExpr Id))
983 -- The returned [Id] is the list of new Ids bound by
984 -- this statement. It can be used to extend the
985 -- InteractiveContext via extendInteractiveContext.
987 -- The returned TypecheckedHsExpr is of type IO [ () ],
988 -- a list of the bound values, coerced to ().
990 tcRnStmt hsc_env ictxt rdr_stmt
991 = initTcPrintErrors hsc_env iNTERACTIVE $
992 setInteractiveContext hsc_env ictxt $ do {
994 -- Rename; use CmdLineMode because tcRnStmt is only used interactively
995 (([rn_stmt], _), fvs) <- rnStmts DoExpr [rdr_stmt] (return ((), emptyFVs)) ;
996 traceRn (text "tcRnStmt" <+> vcat [ppr rdr_stmt, ppr rn_stmt, ppr fvs]) ;
998 rnDump (ppr rn_stmt) ;
1000 -- The real work is done here
1001 (bound_ids, tc_expr) <- mkPlan rn_stmt ;
1002 zonked_expr <- zonkTopLExpr tc_expr ;
1003 zonked_ids <- zonkTopBndrs bound_ids ;
1005 -- None of the Ids should be of unboxed type, because we
1006 -- cast them all to HValues in the end!
1007 mapM bad_unboxed (filter (isUnLiftedType . idType) zonked_ids) ;
1009 traceTc (text "tcs 1") ;
1010 let { global_ids = map globaliseAndTidy zonked_ids } ;
1012 {- ---------------------------------------------
1013 At one stage I removed any shadowed bindings from the type_env;
1014 they are inaccessible but might, I suppose, cause a space leak if we leave them there.
1015 However, with Template Haskell they aren't necessarily inaccessible. Consider this
1017 Prelude> let f n = n * 2 :: Int
1018 Prelude> fName <- runQ [| f |]
1019 Prelude> $(return $ AppE fName (LitE (IntegerL 7)))
1021 Prelude> let f n = n * 3 :: Int
1022 Prelude> $(return $ AppE fName (LitE (IntegerL 7)))
1023 In the last line we use 'fName', which resolves to the *first* 'f'
1024 in scope. If we delete it from the type env, GHCi crashes because
1025 it doesn't expect that.
1027 Hence this code is commented out
1029 -------------------------------------------------- -}
1031 dumpOptTcRn Opt_D_dump_tc
1032 (vcat [text "Bound Ids" <+> pprWithCommas ppr global_ids,
1033 text "Typechecked expr" <+> ppr zonked_expr]) ;
1035 return (global_ids, zonked_expr)
1038 bad_unboxed id = addErr (sep [ptext (sLit "GHCi can't bind a variable of unlifted type:"),
1039 nest 2 (ppr id <+> dcolon <+> ppr (idType id))])
1041 globaliseAndTidy :: Id -> Id
1042 globaliseAndTidy id -- Note [Interactively-bound Ids in GHCi]
1043 = Id.setIdType (globaliseId VanillaGlobal id) tidy_type
1045 tidy_type = tidyTopType (idType id)
1048 Note [Interactively-bound Ids in GHCi]
1049 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1050 The Ids bound by previous Stmts in Template Haskell are currently
1052 b) with an Internal Name (not External)
1053 c) and a tidied type
1055 (a) They must be GlobalIds (not LocalIds) otherwise when we come to
1056 compile an expression using these ids later, the byte code
1057 generator will consider the occurrences to be free rather than
1060 (b) They retain their Internal names becuase we don't have a suitable
1061 Module to name them with. We could revisit this choice.
1063 (c) Their types are tidied. This is important, because :info may ask
1064 to look at them, and :info expects the things it looks up to have
1068 --------------------------------------------------------------------------
1069 Typechecking Stmts in GHCi
1071 Here is the grand plan, implemented in tcUserStmt
1073 What you type The IO [HValue] that hscStmt returns
1074 ------------- ------------------------------------
1075 let pat = expr ==> let pat = expr in return [coerce HVal x, coerce HVal y, ...]
1078 pat <- expr ==> expr >>= \ pat -> return [coerce HVal x, coerce HVal y, ...]
1081 expr (of IO type) ==> expr >>= \ it -> return [coerce HVal it]
1082 [NB: result not printed] bindings: [it]
1084 expr (of non-IO type, ==> let it = expr in print it >> return [coerce HVal it]
1085 result showable) bindings: [it]
1087 expr (of non-IO type,
1088 result not showable) ==> error
1092 ---------------------------
1093 type PlanResult = ([Id], LHsExpr Id)
1094 type Plan = TcM PlanResult
1096 runPlans :: [Plan] -> TcM PlanResult
1097 -- Try the plans in order. If one fails (by raising an exn), try the next.
1098 -- If one succeeds, take it.
1099 runPlans [] = panic "runPlans"
1101 runPlans (p:ps) = tryTcLIE_ (runPlans ps) p
1103 --------------------
1104 mkPlan :: LStmt Name -> TcM PlanResult
1105 mkPlan (L loc (ExprStmt expr _ _)) -- An expression typed at the prompt
1106 = do { uniq <- newUnique -- is treated very specially
1107 ; let fresh_it = itName uniq
1108 the_bind = L loc $ mkFunBind (L loc fresh_it) matches
1109 matches = [mkMatch [] expr emptyLocalBinds]
1110 let_stmt = L loc $ LetStmt (HsValBinds (ValBindsOut [(NonRecursive,unitBag the_bind)] []))
1111 bind_stmt = L loc $ BindStmt (nlVarPat fresh_it) expr
1112 (HsVar bindIOName) noSyntaxExpr
1113 print_it = L loc $ ExprStmt (nlHsApp (nlHsVar printName) (nlHsVar fresh_it))
1114 (HsVar thenIOName) placeHolderType
1117 -- [it <- e; print it] but not if it::()
1119 -- [let it = e; print it]
1120 ; runPlans [ -- Plan A
1121 do { stuff@([it_id], _) <- tcGhciStmts [bind_stmt, print_it]
1122 ; it_ty <- zonkTcType (idType it_id)
1123 ; when (isUnitTy it_ty) failM
1126 -- Plan B; a naked bind statment
1127 tcGhciStmts [bind_stmt],
1129 -- Plan C; check that the let-binding is typeable all by itself.
1130 -- If not, fail; if so, try to print it.
1131 -- The two-step process avoids getting two errors: one from
1132 -- the expression itself, and one from the 'print it' part
1133 -- This two-step story is very clunky, alas
1134 do { checkNoErrs (tcGhciStmts [let_stmt])
1135 --- checkNoErrs defeats the error recovery of let-bindings
1136 ; tcGhciStmts [let_stmt, print_it] }
1139 mkPlan stmt@(L loc (BindStmt {}))
1140 | [L _ v] <- collectLStmtBinders stmt -- One binder, for a bind stmt
1141 = do { let print_v = L loc $ ExprStmt (nlHsApp (nlHsVar printName) (nlHsVar v))
1142 (HsVar thenIOName) placeHolderType
1144 ; print_bind_result <- doptM Opt_PrintBindResult
1145 ; let print_plan = do
1146 { stuff@([v_id], _) <- tcGhciStmts [stmt, print_v]
1147 ; v_ty <- zonkTcType (idType v_id)
1148 ; when (isUnitTy v_ty || not (isTauTy v_ty)) failM
1152 -- [stmt; print v] but not if v::()
1154 ; runPlans ((if print_bind_result then [print_plan] else []) ++
1155 [tcGhciStmts [stmt]])
1159 = tcGhciStmts [stmt]
1161 ---------------------------
1162 tcGhciStmts :: [LStmt Name] -> TcM PlanResult
1164 = do { ioTyCon <- tcLookupTyCon ioTyConName ;
1165 ret_id <- tcLookupId returnIOName ; -- return @ IO
1167 ret_ty = mkListTy unitTy ;
1168 io_ret_ty = mkTyConApp ioTyCon [ret_ty] ;
1169 tc_io_stmts stmts = tcStmts DoExpr tcDoStmt stmts io_ret_ty ;
1171 names = map unLoc (collectLStmtsBinders stmts) ;
1173 -- mk_return builds the expression
1174 -- returnIO @ [()] [coerce () x, .., coerce () z]
1176 -- Despite the inconvenience of building the type applications etc,
1177 -- this *has* to be done in type-annotated post-typecheck form
1178 -- because we are going to return a list of *polymorphic* values
1179 -- coerced to type (). If we built a *source* stmt
1180 -- return [coerce x, ..., coerce z]
1181 -- then the type checker would instantiate x..z, and we wouldn't
1182 -- get their *polymorphic* values. (And we'd get ambiguity errs
1183 -- if they were overloaded, since they aren't applied to anything.)
1184 mk_return ids = nlHsApp (nlHsTyApp ret_id [ret_ty])
1185 (noLoc $ ExplicitList unitTy (map mk_item ids)) ;
1186 mk_item id = nlHsApp (nlHsTyApp unsafeCoerceId [idType id, unitTy])
1190 -- OK, we're ready to typecheck the stmts
1191 traceTc (text "TcRnDriver.tcGhciStmts: tc stmts") ;
1192 ((tc_stmts, ids), lie) <- getLIE $ tc_io_stmts stmts $ \ _ ->
1193 mapM tcLookupId names ;
1194 -- Look up the names right in the middle,
1195 -- where they will all be in scope
1197 -- Simplify the context
1198 traceTc (text "TcRnDriver.tcGhciStmts: simplify ctxt") ;
1199 const_binds <- checkNoErrs (tcSimplifyInteractive lie) ;
1200 -- checkNoErrs ensures that the plan fails if context redn fails
1202 traceTc (text "TcRnDriver.tcGhciStmts: done") ;
1203 return (ids, mkHsDictLet const_binds $
1204 noLoc (HsDo DoExpr tc_stmts (mk_return ids) io_ret_ty))
1209 tcRnExpr just finds the type of an expression
1213 -> InteractiveContext
1216 tcRnExpr hsc_env ictxt rdr_expr
1217 = initTcPrintErrors hsc_env iNTERACTIVE $
1218 setInteractiveContext hsc_env ictxt $ do {
1220 (rn_expr, fvs) <- rnLExpr rdr_expr ;
1223 -- Now typecheck the expression;
1224 -- it might have a rank-2 type (e.g. :t runST)
1225 ((tc_expr, res_ty), lie) <- getLIE (tcInferRho rn_expr) ;
1226 ((qtvs, dict_insts, _), lie_top) <- getLIE (tcSimplifyInfer smpl_doc (tyVarsOfType res_ty) lie) ;
1227 tcSimplifyInteractive lie_top ;
1229 let { all_expr_ty = mkForAllTys qtvs $
1230 mkFunTys (map (idType . instToId) dict_insts) $
1232 zonkTcType all_expr_ty
1235 smpl_doc = ptext (sLit "main expression")
1238 tcRnType just finds the kind of a type
1242 -> InteractiveContext
1245 tcRnType hsc_env ictxt rdr_type
1246 = initTcPrintErrors hsc_env iNTERACTIVE $
1247 setInteractiveContext hsc_env ictxt $ do {
1249 rn_type <- rnLHsType doc rdr_type ;
1252 -- Now kind-check the type
1253 (ty', kind) <- kcHsType rn_type ;
1257 doc = ptext (sLit "In GHCi input")
1263 %************************************************************************
1265 More GHCi stuff, to do with browsing and getting info
1267 %************************************************************************
1271 -- ASSUMES that the module is either in the HomePackageTable or is
1272 -- a package module with an interface on disk. If neither of these is
1273 -- true, then the result will be an error indicating the interface
1274 -- could not be found.
1275 getModuleExports :: HscEnv -> Module -> IO (Messages, Maybe [AvailInfo])
1276 getModuleExports hsc_env mod
1279 checkMods = ic_toplev_scope ic ++ ic_exports ic
1281 initTc hsc_env HsSrcFile False iNTERACTIVE (tcGetModuleExports mod checkMods)
1283 -- Get the export avail info and also load all orphan and family-instance
1284 -- modules. Finally, check that the family instances of all modules in the
1285 -- interactive context are consistent (these modules are in the second
1287 tcGetModuleExports :: Module -> [Module] -> TcM [AvailInfo]
1288 tcGetModuleExports mod directlyImpMods
1289 = do { let doc = ptext (sLit "context for compiling statements")
1290 ; iface <- initIfaceTcRn $ loadSysInterface doc mod
1292 -- Load any orphan-module and family instance-module
1293 -- interfaces, so their instances are visible.
1294 ; loadOrphanModules (dep_orphs (mi_deps iface)) False
1295 ; loadOrphanModules (dep_finsts (mi_deps iface)) True
1297 -- Check that the family instances of all directly loaded
1298 -- modules are consistent.
1299 ; checkFamInstConsistency (dep_finsts (mi_deps iface)) directlyImpMods
1301 ; ifaceExportNames (mi_exports iface)
1304 tcRnLookupRdrName :: HscEnv -> RdrName -> IO (Maybe [Name])
1305 tcRnLookupRdrName hsc_env rdr_name
1306 = initTcPrintErrors hsc_env iNTERACTIVE $
1307 setInteractiveContext hsc_env (hsc_IC hsc_env) $
1308 lookup_rdr_name rdr_name
1310 lookup_rdr_name rdr_name = do {
1311 -- If the identifier is a constructor (begins with an
1312 -- upper-case letter), then we need to consider both
1313 -- constructor and type class identifiers.
1314 let { rdr_names = dataTcOccs rdr_name } ;
1316 -- results :: [Either Messages Name]
1317 results <- mapM (tryTcErrs . lookupOccRn) rdr_names ;
1319 traceRn (text "xx" <+> vcat [ppr rdr_names, ppr (map snd results)]);
1320 -- The successful lookups will be (Just name)
1321 let { (warns_s, good_names) = unzip [ (msgs, name)
1322 | (msgs, Just name) <- results] ;
1323 errs_s = [msgs | (msgs, Nothing) <- results] } ;
1325 -- Fail if nothing good happened, else add warnings
1326 if null good_names then
1327 -- No lookup succeeded, so
1328 -- pick the first error message and report it
1329 -- ToDo: If one of the errors is "could be Foo.X or Baz.X",
1330 -- while the other is "X is not in scope",
1331 -- we definitely want the former; but we might pick the latter
1332 do { addMessages (head errs_s) ; failM }
1333 else -- Add deprecation warnings
1334 mapM_ addMessages warns_s ;
1339 tcRnLookupName :: HscEnv -> Name -> IO (Maybe TyThing)
1340 tcRnLookupName hsc_env name
1341 = initTcPrintErrors hsc_env iNTERACTIVE $
1342 setInteractiveContext hsc_env (hsc_IC hsc_env) $
1343 tcRnLookupName' name
1345 -- To look up a name we have to look in the local environment (tcl_lcl)
1346 -- as well as the global environment, which is what tcLookup does.
1347 -- But we also want a TyThing, so we have to convert:
1349 tcRnLookupName' :: Name -> TcRn TyThing
1350 tcRnLookupName' name = do
1351 tcthing <- tcLookup name
1353 AGlobal thing -> return thing
1354 ATcId{tct_id=id} -> return (AnId id)
1355 _ -> panic "tcRnLookupName'"
1357 tcRnGetInfo :: HscEnv
1359 -> IO (Maybe (TyThing, Fixity, [Instance]))
1361 -- Used to implemnent :info in GHCi
1363 -- Look up a RdrName and return all the TyThings it might be
1364 -- A capitalised RdrName is given to us in the DataName namespace,
1365 -- but we want to treat it as *both* a data constructor
1366 -- *and* as a type or class constructor;
1367 -- hence the call to dataTcOccs, and we return up to two results
1368 tcRnGetInfo hsc_env name
1369 = initTcPrintErrors hsc_env iNTERACTIVE $
1370 let ictxt = hsc_IC hsc_env in
1371 setInteractiveContext hsc_env ictxt $ do
1373 -- Load the interface for all unqualified types and classes
1374 -- That way we will find all the instance declarations
1375 -- (Packages have not orphan modules, and we assume that
1376 -- in the home package all relevant modules are loaded.)
1377 loadUnqualIfaces ictxt
1379 thing <- tcRnLookupName' name
1380 fixity <- lookupFixityRn name
1381 ispecs <- lookupInsts thing
1382 return (thing, fixity, ispecs)
1384 lookupInsts :: TyThing -> TcM [Instance]
1385 lookupInsts (AClass cls)
1386 = do { inst_envs <- tcGetInstEnvs
1387 ; return (classInstances inst_envs cls) }
1389 lookupInsts (ATyCon tc)
1390 = do { eps <- getEps -- Load all instances for all classes that are
1391 -- in the type environment (which are all the ones
1392 -- we've seen in any interface file so far)
1393 ; (pkg_ie, home_ie) <- tcGetInstEnvs -- Search all
1395 | ispec <- instEnvElts home_ie ++ instEnvElts pkg_ie
1396 , let dfun = instanceDFunId ispec
1399 relevant df = tc_name `elemNameSet` tyClsNamesOfDFunHead (idType df)
1400 tc_name = tyConName tc
1402 lookupInsts other = return []
1404 loadUnqualIfaces :: InteractiveContext -> TcM ()
1405 -- Load the home module for everything that is in scope unqualified
1406 -- This is so that we can accurately report the instances for
1408 loadUnqualIfaces ictxt
1410 mapM_ (loadSysInterface doc) (moduleSetElts (mkModuleSet unqual_mods))
1412 unqual_mods = [ nameModule name
1413 | gre <- globalRdrEnvElts (ic_rn_gbl_env ictxt),
1414 let name = gre_name gre,
1415 not (isInternalName name),
1416 isTcOcc (nameOccName name), -- Types and classes only
1417 unQualOK gre ] -- In scope unqualified
1418 doc = ptext (sLit "Need interface for module whose export(s) are in scope unqualified")
1422 %************************************************************************
1426 %************************************************************************
1429 rnDump :: SDoc -> TcRn ()
1430 -- Dump, with a banner, if -ddump-rn
1431 rnDump doc = do { dumpOptTcRn Opt_D_dump_rn (mkDumpDoc "Renamer" doc) }
1433 tcDump :: TcGblEnv -> TcRn ()
1435 = do { dflags <- getDOpts ;
1437 -- Dump short output if -ddump-types or -ddump-tc
1438 when (dopt Opt_D_dump_types dflags || dopt Opt_D_dump_tc dflags)
1439 (dumpTcRn short_dump) ;
1441 -- Dump bindings if -ddump-tc
1442 dumpOptTcRn Opt_D_dump_tc (mkDumpDoc "Typechecker" full_dump)
1445 short_dump = pprTcGblEnv env
1446 full_dump = pprLHsBinds (tcg_binds env)
1447 -- NB: foreign x-d's have undefined's in their types;
1448 -- hence can't show the tc_fords
1451 = do { dflags <- getDOpts ;
1452 when (dopt Opt_D_dump_types dflags || dopt Opt_D_dump_tc dflags)
1453 (dumpTcRn (pprModGuts mod_guts)) ;
1455 -- Dump bindings if -ddump-tc
1456 dumpOptTcRn Opt_D_dump_tc (mkDumpDoc "Typechecker" full_dump) }
1458 full_dump = pprCoreBindings (mg_binds mod_guts)
1460 -- It's unpleasant having both pprModGuts and pprModDetails here
1461 pprTcGblEnv :: TcGblEnv -> SDoc
1462 pprTcGblEnv (TcGblEnv { tcg_type_env = type_env,
1464 tcg_fam_insts = fam_insts,
1466 tcg_imports = imports })
1467 = vcat [ ppr_types insts type_env
1468 , ppr_tycons fam_insts type_env
1470 , ppr_fam_insts fam_insts
1471 , vcat (map ppr rules)
1472 , ppr_gen_tycons (typeEnvTyCons type_env)
1473 , ptext (sLit "Dependent modules:") <+> ppr (eltsUFM (imp_dep_mods imports))
1474 , ptext (sLit "Dependent packages:") <+> ppr (imp_dep_pkgs imports)]
1476 pprModGuts :: ModGuts -> SDoc
1477 pprModGuts (ModGuts { mg_types = type_env,
1479 = vcat [ ppr_types [] type_env,
1482 ppr_types :: [Instance] -> TypeEnv -> SDoc
1483 ppr_types insts type_env
1484 = text "TYPE SIGNATURES" $$ nest 4 (ppr_sigs ids)
1486 dfun_ids = map instanceDFunId insts
1487 ids = [id | id <- typeEnvIds type_env, want_sig id]
1488 want_sig id | opt_PprStyle_Debug = True
1489 | otherwise = isLocalId id &&
1490 isExternalName (idName id) &&
1491 not (id `elem` dfun_ids)
1492 -- isLocalId ignores data constructors, records selectors etc.
1493 -- The isExternalName ignores local dictionary and method bindings
1494 -- that the type checker has invented. Top-level user-defined things
1495 -- have External names.
1497 ppr_tycons :: [FamInst] -> TypeEnv -> SDoc
1498 ppr_tycons fam_insts type_env
1499 = text "TYPE CONSTRUCTORS" $$ nest 4 (ppr_tydecls tycons)
1501 fi_tycons = map famInstTyCon fam_insts
1502 tycons = [tycon | tycon <- typeEnvTyCons type_env, want_tycon tycon]
1503 want_tycon tycon | opt_PprStyle_Debug = True
1504 | otherwise = not (isImplicitTyCon tycon) &&
1505 isExternalName (tyConName tycon) &&
1506 not (tycon `elem` fi_tycons)
1508 ppr_insts :: [Instance] -> SDoc
1509 ppr_insts [] = empty
1510 ppr_insts ispecs = text "INSTANCES" $$ nest 2 (pprInstances ispecs)
1512 ppr_fam_insts :: [FamInst] -> SDoc
1513 ppr_fam_insts [] = empty
1514 ppr_fam_insts fam_insts =
1515 text "FAMILY INSTANCES" $$ nest 2 (pprFamInsts fam_insts)
1517 ppr_sigs :: [Var] -> SDoc
1519 -- Print type signatures; sort by OccName
1520 = vcat (map ppr_sig (sortLe le_sig ids))
1522 le_sig id1 id2 = getOccName id1 <= getOccName id2
1523 ppr_sig id = ppr id <+> dcolon <+> ppr (tidyTopType (idType id))
1525 ppr_tydecls :: [TyCon] -> SDoc
1527 -- Print type constructor info; sort by OccName
1528 = vcat (map ppr_tycon (sortLe le_sig tycons))
1530 le_sig tycon1 tycon2 = getOccName tycon1 <= getOccName tycon2
1532 | isCoercionTyCon tycon = ptext (sLit "coercion") <+> ppr tycon
1533 | otherwise = ppr (tyThingToIfaceDecl (ATyCon tycon))
1535 ppr_rules :: [CoreRule] -> SDoc
1536 ppr_rules [] = empty
1537 ppr_rules rs = vcat [ptext (sLit "{-# RULES"),
1538 nest 4 (pprRules rs),
1541 ppr_gen_tycons [] = empty
1542 ppr_gen_tycons tcs = vcat [ptext (sLit "Tycons with generics:"),
1543 nest 2 (fsep (map ppr (filter tyConHasGenerics tcs)))]