Fix minor layout issue (whitespace only)
[ghc-hetmet.git] / compiler / typecheck / TcRnDriver.lhs
1 %
2 % (c) The University of Glasgow 2006
3 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
4 %
5 \section[TcModule]{Typechecking a whole module}
6
7 \begin{code}
8 {-# OPTIONS -w #-}
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
13 -- for details
14
15 module TcRnDriver (
16 #ifdef GHCI
17         tcRnStmt, tcRnExpr, tcRnType,
18         tcRnLookupRdrName,
19         tcRnLookupName,
20         tcRnGetInfo,
21         getModuleExports, 
22 #endif
23         tcRnModule, 
24         tcTopSrcDecls,
25         tcRnExtCore
26     ) where
27
28 import IO
29 #ifdef GHCI
30 import {-# SOURCE #-} TcSplice ( tcSpliceDecls )
31 #endif
32
33 import DynFlags
34 import StaticFlags
35 import HsSyn
36 import RdrHsSyn
37
38 import PrelNames
39 import RdrName
40 import TcHsSyn
41 import TcExpr
42 import TcRnMonad
43 import TcType
44 import Inst
45 import FamInst
46 import InstEnv
47 import FamInstEnv
48 import TcBinds
49 import TcDefaults
50 import TcEnv
51 import TcRules
52 import TcForeign
53 import TcInstDcls
54 import TcIface
55 import MkIface
56 import IfaceSyn
57 import TcSimplify
58 import TcTyClsDecls
59 import TcUnify  ( withBox )
60 import LoadIface
61 import RnNames
62 import RnEnv
63 import RnSource
64 import RnHsDoc
65 import PprCore
66 import CoreSyn
67 import ErrUtils
68 import Id
69 import VarEnv
70 import Var
71 import Module
72 import LazyUniqFM
73 import Name
74 import NameEnv
75 import NameSet
76 import TyCon
77 import TysWiredIn
78 import SrcLoc
79 import HscTypes
80 import ListSetOps
81 import Outputable
82 import DataCon
83 import Type
84 import Class
85
86 #ifdef GHCI
87 import Linker
88 import TcHsType
89 import TcMType
90 import TcMatches
91 import RnTypes
92 import RnExpr
93 import IfaceEnv
94 import MkId
95 import IdInfo
96 import {- Kind parts of -} Type
97 import BasicTypes
98 import Foreign.Ptr( Ptr )
99 #endif
100
101 import FastString
102 import Maybes
103 import Util
104 import Bag
105
106 import Control.Monad
107 import Data.Maybe       ( isJust )
108
109 #include "HsVersions.h"
110 \end{code}
111
112
113
114 %************************************************************************
115 %*                                                                      *
116         Typecheck and rename a module
117 %*                                                                      *
118 %************************************************************************
119
120
121 \begin{code}
122 tcRnModule :: HscEnv 
123            -> HscSource
124            -> Bool              -- True <=> save renamed syntax
125            -> Located (HsModule RdrName)
126            -> IO (Messages, Maybe TcGblEnv)
127
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" ;
133
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 } ;
138                                                 -- The normal case
139                 
140    initTc hsc_env hsc_src save_rn_syntax this_mod $ 
141    setSrcSpan loc $
142    do {         -- Deal with imports;
143         tcg_env <- tcRnImports hsc_env this_mod import_decls ;
144         setGblEnv tcg_env               $ do {
145
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
150                 --
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 ;
155
156                 -- Rename and type check the declarations
157         traceRn (text "rn1a") ;
158         tcg_env <- if isHsBoot hsc_src then
159                         tcRnHsBootDecls local_decls
160                    else 
161                         tcRnSrcDecls boot_iface local_decls ;
162         setGblEnv tcg_env               $ do {
163
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 ;
173
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") ;
178
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 ;
182
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) ;
187
188                 -- Rename the Haddock documentation 
189         tcg_env <- rnHaddock module_info maybe_doc tcg_env ;
190
191                 -- Report unused names
192         reportUnusedNames export_ies tcg_env ;
193
194                 -- Dump output and return
195         tcDump tcg_env ;
196         return tcg_env
197     }}}}
198 \end{code}
199
200
201 %************************************************************************
202 %*                                                                      *
203                 Import declarations
204 %*                                                                      *
205 %************************************************************************
206
207 \begin{code}
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 ;
211
212         ; let { dep_mods :: ModuleNameEnv (ModuleName, IsBootInterface)
213               ; dep_mods = imp_dep_mods imports
214
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 
223                                                             want_instances
224               } ;
225
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 }) ;
230
231                 -- Update the gbl env
232         ; updGblEnv ( \ gbl -> 
233             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) 
239                                                       home_fam_insts,
240               tcg_hpc          = hpc_info
241             }) $ do {
242
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)
248         ; failIfErrsM
249
250                 -- Load any orphan-module and family instance-module
251                 -- interfaces, so that their rules and instance decls will be
252                 -- found.
253         ; loadOrphanModules (imp_orphs  imports) False
254         ; loadOrphanModules (imp_finsts imports) True 
255
256                 -- Check type-familily consistency
257         ; traceRn (text "rn1: checking family instance consistency")
258         ; let { dir_imp_mods = moduleEnvKeys
259                              . imp_mods 
260                              $ imports }
261         ; checkFamInstConsistency (imp_finsts imports) dir_imp_mods ;
262
263         ; getGblEnv } }
264 \end{code}
265
266
267 %************************************************************************
268 %*                                                                      *
269         Type-checking external-core modules
270 %*                                                                      *
271 %************************************************************************
272
273 \begin{code}
274 tcRnExtCore :: HscEnv 
275             -> HsExtCore RdrName
276             -> IO (Messages, Maybe ModGuts)
277         -- Nothing => some error occurred 
278
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" ;
282
283    initTc hsc_env ExtCoreFile False this_mod $ do {
284
285    let { ldecls  = map noLoc decls } ;
286
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 -} ;
297
298    setEnvs tc_envs $ do {
299
300    rn_decls <- checkNoErrs $ rnTyClDecls ldecls ;
301
302         -- Dump trace of renaming part
303    rnDump (ppr rn_decls) ;
304
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
309
310    setGblEnv tcg_env $ do {
311    
312         -- Now the core bindings
313    core_binds <- initIfaceExtCore (tcExtCoreBindings src_binds) ;
314
315         -- Wrap up
316    let {
317         bndrs      = bindersOfBinds core_binds ;
318         my_exports = map (Avail . idName) bndrs ;
319                 -- ToDo: export the data types also?
320
321         final_type_env = extendTypeEnvWithIds (tcg_type_env tcg_env) bndrs ;
322
323         mod_guts = ModGuts {    mg_module    = this_mod,
324                                 mg_boot      = False,
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,
334                                 mg_rules     = [],
335                                 mg_binds     = core_binds,
336
337                                 -- Stubs
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
345                     } } ;
346
347    tcCoreDump mod_guts ;
348
349    return mod_guts
350    }}}}
351
352 mkFakeGroup decls -- Rather clumsy; lots of unused fields
353   = emptyRdrGroup { hs_tyclds = decls }
354 \end{code}
355
356
357 %************************************************************************
358 %*                                                                      *
359         Type-checking the top level of a module
360 %*                                                                      *
361 %************************************************************************
362
363 \begin{code}
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 ;
370
371              --         Finish simplifying class constraints
372              -- 
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.
377              --
378              -- We do this after checkMain, so that we use the type info 
379              -- thaat checkMain adds
380              -- 
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) ;
387
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 } ;
395
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!
399
400         (bind_ids, binds', fords', rules') <- zonkTopDecls all_binds rules fords ;
401
402         let { final_type_env = extendTypeEnvWithIds type_env bind_ids
403             ; tcg_env' = tcg_env { tcg_type_env = final_type_env,
404                                    tcg_binds = binds',
405                                    tcg_rules = rules', 
406                                    tcg_fords = fords' } } ;
407
408         return (tcg_env' { tcg_binds = tcg_binds tcg_env' }) 
409    }
410
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)
417
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
421
422         (tcg_env, tcl_env) <- setGblEnv tcg_env $ 
423                               tcTopSrcDecls boot_details rn_decls ;
424
425         -- If there is no splice, we're nearly done
426         setEnvs (tcg_env, tcl_env) $ 
427         case group_tail of {
428            Nothing -> do { tcg_env <- checkMain ;       -- Check for `main'
429                            return (tcg_env, tcl_env) 
430                       } ;
431
432         -- If there's a splice, we must carry on
433            Just (SpliceDecl splice_expr, rest_ds) -> do {
434 #ifndef GHCI
435         failWithTc (text "Can't do a top-level splice; need a bootstrapped compiler")
436 #else
437
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) ;
442
443         -- Execute the splice
444         spliced_decls <- tcSpliceDecls rn_splice_expr ;
445
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)
449 #endif /* GHCI */
450     } } }
451 \end{code}
452
453 %************************************************************************
454 %*                                                                      *
455         Compiling hs-boot source files, and
456         comparing the hi-boot interface with the real thing
457 %*                                                                      *
458 %************************************************************************
459
460 \begin{code}
461 tcRnHsBootDecls :: [LHsDecl RdrName] -> TcM TcGblEnv
462 tcRnHsBootDecls decls
463    = do { let { (first_group, group_tail) = findSplice decls }
464
465         ; case group_tail of
466              Just stuff -> spliceInHsBootErr stuff
467              Nothing    -> return ()
468
469                 -- Rename the declarations
470         ; (tcg_env, rn_group) <- rnTopSrcDecls first_group
471         ; setGblEnv tcg_env $ do {
472
473         -- Todo: check no foreign decls, no rules, no default decls
474
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 {
480
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 {
486
487                 -- Typecheck value declarations
488         ; traceTc (text "Tc5") 
489         ; val_ids <- tcHsBootSigs (hs_valds rn_group)
490
491                 -- Wrap up
492                 -- No simplification or zonking to do
493         ; traceTc (text "Tc7a")
494         ; gbl_env <- getGblEnv 
495         
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 }) 
504    }}}}
505
506 spliceInHsBootErr (SpliceDecl (L loc _), _)
507   = addErrAt loc (ptext (sLit "Splices are not allowed in hs-boot files"))
508 \end{code}
509
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).
512
513 \begin{code}
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.
519 --
520 -- The bindings we return give bindings for the dfuns defined in the
521 -- hs-boot file, such as        $fbEqT = $fEqT
522
523 checkHiBootIface
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!
530   = return tcg_env      
531
532   | otherwise
533   = do  { traceTc (text "checkHiBootIface" <+> (ppr boot_type_env $$ ppr boot_insts $$ 
534                                 ppr boot_exports)) ;
535
536                 -- Check the exports of the boot module, one by one
537         ; mapM_ check_export boot_exports
538
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 ]
547
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...
555
556         ; failIfErrsM
557         ; return tcg_env' }
558   where
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)
564
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")
569
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 ()
573
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)
584
585       | otherwise
586       = addErrTc (missingBootThing name "defined in")
587       where
588         name          = availName boot_avail
589         mb_boot_thing = lookupTypeEnv boot_type_env name
590         missing_names = case lookupNameEnv local_export_env name of
591                           Nothing    -> [name]
592                           Just avail -> availNames boot_avail `minusList` availNames avail
593                  
594     dfun_names = map getName boot_insts
595
596     local_export_env :: NameEnv AvailInfo
597     local_export_env = availsToNameEnv local_exports
598
599     check_inst :: Instance -> TcM (Maybe (Id, Id))
600         -- Returns a pair of the boot dfun in terms of the equivalent real dfun
601     check_inst boot_inst
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))
607         where
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
611
612
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.
617 --
618 -- See rnfail055 for a good test of this stuff.
619
620 checkBootDecl :: TyThing -> TyThing -> Bool
621
622 checkBootDecl (AnId id1) (AnId id2)
623   = ASSERT(id1 == id2) 
624     (idType id1 `tcEqType` idType id2)
625
626 checkBootDecl (ATyCon tc1) (ATyCon tc2)
627   | isSynTyCon tc1 && isSynTyCon tc2
628   = ASSERT(tc1 == tc2)
629     let tvs1 = tyConTyVars tc1; tvs2 = tyConTyVars tc2
630         env = rnBndrs2 env0 tvs1 tvs2
631
632         eqSynRhs (OpenSynTyCon k1 _) (OpenSynTyCon k2 _)
633             = tcEqTypeX env k1 k2
634         eqSynRhs (SynonymTyCon t1) (SynonymTyCon t2)
635             = tcEqTypeX env t1 t2
636     in
637     equalLength tvs1 tvs2 &&
638     eqSynRhs (synTyConRhs tc1) (synTyConRhs tc2)
639
640   | isAlgTyCon tc1 && isAlgTyCon tc2
641   = ASSERT(tc1 == tc2)
642     eqListBy tcEqPred (tyConStupidTheta tc1) (tyConStupidTheta tc2)
643     && eqAlgRhs (algTyConRhs tc1) (algTyConRhs tc2)
644
645   | isForeignTyCon tc1 && isForeignTyCon tc2
646   = tyConExtName tc1 == tyConExtName tc2
647   where 
648         env0 = mkRnEnv2 emptyInScopeSet
649
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)
656         eqAlgRhs _ _ = False
657
658         eqCon c1 c2
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
666              in
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)
674
675 checkBootDecl (AClass c1)  (AClass c2)
676   = let 
677        (clas_tyvars1, clas_fds1, sc_theta1, _, _, op_stuff1) 
678           = classExtraBigSig c1
679        (clas_tyvars2, clas_fds2, sc_theta2, _, _, op_stuff2) 
680           = classExtraBigSig c2
681
682        env0 = mkRnEnv2 emptyInScopeSet
683        env = rnBndrs2 env0 clas_tyvars1 clas_tyvars2
684
685        eqSig (id1, def_meth1) (id2, def_meth2)
686          = idName id1 == idName id2 &&
687            tcEqTypeX env op_ty1 op_ty2
688          where
689           (_, rho_ty1) = splitForAllTys (idType id1)
690           op_ty1 = funResultTy rho_ty1
691           (_, rho_ty2) = splitForAllTys (idType id2)
692           op_ty2 = funResultTy rho_ty2
693
694        eqFD (as1,bs1) (as2,bs2) = 
695          eqListBy (tcEqTypeX env) (mkTyVarTys as1) (mkTyVarTys as2) &&
696          eqListBy (tcEqTypeX env) (mkTyVarTys bs1) (mkTyVarTys bs2)
697     in
698        equalLength clas_tyvars1 clas_tyvars2 &&
699        eqListBy eqFD clas_fds1 clas_fds2 &&
700        (null sc_theta1 && null op_stuff1
701         ||
702         eqListBy (tcEqPredX env) sc_theta1 sc_theta2 &&
703         eqListBy eqSig op_stuff1 op_stuff2)
704
705 checkBootDecl (ADataCon dc1) (ADataCon dc2)
706   = pprPanic "checkBootDecl" (ppr dc1)
707
708 checkBootDecl _ _ = False -- probably shouldn't happen
709
710 ----------------
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")
714
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]
719
720 instMisMatch inst
721   = hang (ppr inst)
722        2 (ptext (sLit "is defined in the hs-boot file, but not in the module itself"))
723 \end{code}
724
725
726 %************************************************************************
727 %*                                                                      *
728         Type-checking the top level of a module
729 %*                                                                      *
730 %************************************************************************
731
732 tcRnGroup takes a bunch of top-level source-code declarations, and
733  * renames them
734  * gets supporting declarations from interface files
735  * typechecks them
736  * zonks them
737  * and augments the TcGblEnv with the results
738
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.
742
743 \begin{code}
744 ------------------------------------------------
745 rnTopSrcDecls :: HsGroup RdrName -> TcM (TcGblEnv, HsGroup Name)
746 -- Fails if there are any errors
747 rnTopSrcDecls group
748  = do { -- Rename the source decls (with no shadowing; error on duplicates)
749         (tcg_env, rn_decls) <- checkNoErrs $ rnSrcDecls False group ;
750
751         -- save the renamed syntax, if we want it
752         let { tcg_env'
753                 | Just grp <- tcg_rn_decls tcg_env
754                   = tcg_env{ tcg_rn_decls = Just (appendGroups grp rn_decls) }
755                 | otherwise
756                    = tcg_env };
757
758                 -- Dump trace of renaming part
759         rnDump (ppr rn_decls) ;
760
761         return (tcg_env', rn_decls)
762    }
763
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") ;
777
778         tcg_env <- tcTyAndClassDecls boot_details tycl_decls ;
779                 -- If there are any errors, tcTyAndClassDecls fails here
780         
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) ;
783
784
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 {
792
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 {
798
799                 -- Default declarations
800         traceTc (text "Tc4a") ;
801         default_tys <- tcDefaults default_decls ;
802         updGblEnv (\gbl -> gbl { tcg_default = default_tys }) $ do {
803         
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 {
810
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 ;
815
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") ;
820
821                 -- Foreign exports
822                 -- They need to be zonked, so we return them
823         traceTc (text "Tc7") ;
824         (foe_binds, foe_decls) <- tcForeignExports foreign_decls ;
825
826                 -- Rules
827         rules <- tcRules rule_decls ;
828
829                 -- Wrap up
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`
835                           foe_binds  ;
836
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)
843     }}}}}}
844 \end{code}
845
846
847 %************************************************************************
848 %*                                                                      *
849         Checking for 'main'
850 %*                                                                      *
851 %************************************************************************
852
853 \begin{code}
854 checkMain :: TcM TcGblEnv
855 -- If we are in module Main, check that 'main' is defined.
856 checkMain 
857   = do { tcg_env   <- getGblEnv ;
858          dflags    <- getDOpts ;
859          check_main dflags tcg_env
860     }
861
862 check_main dflags tcg_env
863  | mod /= main_mod
864  = traceTc (text "checkMain not" <+> ppr main_mod <+> ppr mod) >>
865    return tcg_env
866
867  | otherwise
868  = do   { mb_main <- lookupSrcOcc_maybe main_fn
869                 -- Check that 'main' is in scope
870                 -- It might be imported from another module!
871         ; case mb_main of {
872              Nothing -> do { traceTc (text "checkMain fail" <+> ppr main_mod <+> ppr main_fn)
873                            ; complain_no_main   
874                            ; return tcg_env } ;
875              Just main_name -> do
876
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])
884
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) }
897
898         ; return (tcg_env { tcg_binds = tcg_binds tcg_env 
899                                         `snocBag` main_bind,
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
904                  }) 
905     }}}
906   where
907     mod          = tcg_mod tcg_env
908     main_mod     = mainModIs dflags
909     main_is_flag = mainFunIs dflags
910
911     main_fn  = case main_is_flag of
912                   Just fn -> mkRdrUnqual (mkVarOccFS (mkFastString fn))
913                   Nothing -> main_RDR_Unqual
914
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.
920
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)
926 \end{code}
927
928 Note [Root-main Id]
929 ~~~~~~~~~~~~~~~~~~~
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
934 ":Main".)  
935
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!
939
940
941 %*********************************************************
942 %*                                                       *
943                 GHCi stuff
944 %*                                                       *
945 %*********************************************************
946
947 \begin{code}
948 #ifdef GHCI
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)
954     in
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) 
959                                                 home_fam_insts 
960       }) $
961
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 
966         --     the given Ids
967         --   - it adds the free tyvars of the Ids to the tcl_tyvars
968         --     set.
969         --
970         -- later ids in ic_tmp_ids must shadow earlier ones with the same
971         -- OccName, and tcExtendIdEnv implements this behaviour.
972
973     do  { traceTc (text "setIC" <+> ppr (ic_tmp_ids icxt))
974         ; thing_inside }
975 \end{code}
976
977
978 \begin{code}
979 tcRnStmt :: HscEnv
980          -> InteractiveContext
981          -> LStmt RdrName
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.
986                 --
987                 -- The returned TypecheckedHsExpr is of type IO [ () ],
988                 -- a list of the bound values, coerced to ().
989
990 tcRnStmt hsc_env ictxt rdr_stmt
991   = initTcPrintErrors hsc_env iNTERACTIVE $ 
992     setInteractiveContext hsc_env ictxt $ do {
993
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]) ;
997     failIfErrsM ;
998     rnDump (ppr rn_stmt) ;
999     
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 ;
1004     
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) ;
1008
1009     traceTc (text "tcs 1") ;
1010     let { global_ids = map globaliseAndTidy zonked_ids } ;
1011     
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
1016    GHCi session
1017          Prelude> let f n = n * 2 :: Int
1018          Prelude> fName <- runQ [| f |]
1019          Prelude> $(return $ AppE fName (LitE (IntegerL 7)))
1020          14
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.
1026  
1027    Hence this code is commented out
1028
1029 -------------------------------------------------- -}
1030
1031     dumpOptTcRn Opt_D_dump_tc 
1032         (vcat [text "Bound Ids" <+> pprWithCommas ppr global_ids,
1033                text "Typechecked expr" <+> ppr zonked_expr]) ;
1034
1035     return (global_ids, zonked_expr)
1036     }
1037   where
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))])
1040
1041 globaliseAndTidy :: Id -> Id
1042 globaliseAndTidy id     -- Note [Interactively-bound Ids in GHCi]
1043   = Id.setIdType (globaliseId VanillaGlobal id) tidy_type
1044   where
1045     tidy_type = tidyTopType (idType id)
1046 \end{code}
1047
1048 Note [Interactively-bound Ids in GHCi]
1049 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1050 The Ids bound by previous Stmts in Template Haskell are currently
1051         a) GlobalIds
1052         b) with an Internal Name (not External)
1053         c) and a tidied type
1054
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
1058      global.
1059
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.
1062
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
1065      tidy types
1066         
1067
1068 --------------------------------------------------------------------------
1069                 Typechecking Stmts in GHCi
1070
1071 Here is the grand plan, implemented in tcUserStmt
1072
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, ...]
1076                                         bindings: [x,y,...]
1077
1078         pat <- expr             ==>     expr >>= \ pat -> return [coerce HVal x, coerce HVal y, ...]
1079                                         bindings: [x,y,...]
1080
1081         expr (of IO type)       ==>     expr >>= \ it -> return [coerce HVal it]
1082           [NB: result not printed]      bindings: [it]
1083           
1084         expr (of non-IO type,   ==>     let it = expr in print it >> return [coerce HVal it]
1085           result showable)              bindings: [it]
1086
1087         expr (of non-IO type, 
1088           result not showable)  ==>     error
1089
1090
1091 \begin{code}
1092 ---------------------------
1093 type PlanResult = ([Id], LHsExpr Id)
1094 type Plan = TcM PlanResult
1095
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"
1100 runPlans [p]    = p
1101 runPlans (p:ps) = tryTcLIE_ (runPlans ps) p
1102
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
1115
1116         -- The plans are:
1117         --      [it <- e; print it]     but not if it::()
1118         --      [it <- e]               
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
1124                        ; return stuff },
1125
1126                         -- Plan B; a naked bind statment
1127                     tcGhciStmts [bind_stmt],    
1128
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] }
1137           ]}
1138
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
1143
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
1149                   ; return stuff }
1150
1151         -- The plans are:
1152         --      [stmt; print v]         but not if v::()
1153         --      [stmt]
1154         ; runPlans ((if print_bind_result then [print_plan] else []) ++
1155                     [tcGhciStmts [stmt]])
1156         }
1157
1158 mkPlan stmt
1159   = tcGhciStmts [stmt]
1160
1161 ---------------------------
1162 tcGhciStmts :: [LStmt Name] -> TcM PlanResult
1163 tcGhciStmts stmts
1164  = do { ioTyCon <- tcLookupTyCon ioTyConName ;
1165         ret_id  <- tcLookupId returnIOName ;            -- return @ IO
1166         let {
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 ;
1170
1171             names = map unLoc (collectLStmtsBinders stmts) ;
1172
1173                 -- mk_return builds the expression
1174                 --      returnIO @ [()] [coerce () x, ..,  coerce () z]
1175                 --
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])
1187                                  (nlHsVar id) 
1188          } ;
1189
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
1196
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
1201
1202         traceTc (text "TcRnDriver.tcGhciStmts: done") ;
1203         return (ids, mkHsDictLet const_binds $
1204                      noLoc (HsDo DoExpr tc_stmts (mk_return ids) io_ret_ty))
1205     }
1206 \end{code}
1207
1208
1209 tcRnExpr just finds the type of an expression
1210
1211 \begin{code}
1212 tcRnExpr :: HscEnv
1213          -> InteractiveContext
1214          -> LHsExpr RdrName
1215          -> IO (Maybe Type)
1216 tcRnExpr hsc_env ictxt rdr_expr
1217   = initTcPrintErrors hsc_env iNTERACTIVE $ 
1218     setInteractiveContext hsc_env ictxt $ do {
1219
1220     (rn_expr, fvs) <- rnLExpr rdr_expr ;
1221     failIfErrsM ;
1222
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 ;
1228
1229     let { all_expr_ty = mkForAllTys qtvs $
1230                         mkFunTys (map (idType . instToId) dict_insts)   $
1231                         res_ty } ;
1232     zonkTcType all_expr_ty
1233     }
1234   where
1235     smpl_doc = ptext (sLit "main expression")
1236 \end{code}
1237
1238 tcRnType just finds the kind of a type
1239
1240 \begin{code}
1241 tcRnType :: HscEnv
1242          -> InteractiveContext
1243          -> LHsType RdrName
1244          -> IO (Maybe Kind)
1245 tcRnType hsc_env ictxt rdr_type
1246   = initTcPrintErrors hsc_env iNTERACTIVE $ 
1247     setInteractiveContext hsc_env ictxt $ do {
1248
1249     rn_type <- rnLHsType doc rdr_type ;
1250     failIfErrsM ;
1251
1252         -- Now kind-check the type
1253     (ty', kind) <- kcHsType rn_type ;
1254     return kind
1255     }
1256   where
1257     doc = ptext (sLit "In GHCi input")
1258
1259 #endif /* GHCi */
1260 \end{code}
1261
1262
1263 %************************************************************************
1264 %*                                                                      *
1265         More GHCi stuff, to do with browsing and getting info
1266 %*                                                                      *
1267 %************************************************************************
1268
1269 \begin{code}
1270 #ifdef GHCI
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
1277   = let
1278       ic        = hsc_IC hsc_env
1279       checkMods = ic_toplev_scope ic ++ ic_exports ic
1280     in
1281     initTc hsc_env HsSrcFile False iNTERACTIVE (tcGetModuleExports mod checkMods)
1282
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
1286 -- argument).
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
1291
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
1296
1297                 -- Check that the family instances of all directly loaded
1298                 -- modules are consistent.
1299        ; checkFamInstConsistency (dep_finsts (mi_deps iface)) directlyImpMods
1300
1301        ; ifaceExportNames (mi_exports iface)
1302        }
1303
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
1309
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 } ;
1315
1316         -- results :: [Either Messages Name]
1317     results <- mapM (tryTcErrs . lookupOccRn) rdr_names ;
1318
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] } ;
1324
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 ;
1335     
1336     return good_names
1337  }
1338
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
1344
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:
1348
1349 tcRnLookupName' :: Name -> TcRn TyThing
1350 tcRnLookupName' name = do
1351    tcthing <- tcLookup name
1352    case tcthing of
1353      AGlobal thing    -> return thing
1354      ATcId{tct_id=id} -> return (AnId id)
1355      _ -> panic "tcRnLookupName'"
1356
1357 tcRnGetInfo :: HscEnv
1358             -> Name
1359             -> IO (Maybe (TyThing, Fixity, [Instance]))
1360
1361 -- Used to implemnent :info in GHCi
1362 --
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
1372
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
1378
1379     thing  <- tcRnLookupName' name
1380     fixity <- lookupFixityRn name
1381     ispecs <- lookupInsts thing
1382     return (thing, fixity, ispecs)
1383
1384 lookupInsts :: TyThing -> TcM [Instance]
1385 lookupInsts (AClass cls)
1386   = do  { inst_envs <- tcGetInstEnvs
1387         ; return (classInstances inst_envs cls) }
1388
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
1394         ; return [ ispec
1395                  | ispec <- instEnvElts home_ie ++ instEnvElts pkg_ie
1396                  , let dfun = instanceDFunId ispec
1397                  , relevant dfun ] } 
1398   where
1399     relevant df = tc_name `elemNameSet` tyClsNamesOfDFunHead (idType df)
1400     tc_name     = tyConName tc            
1401
1402 lookupInsts other = return []
1403
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 
1407 -- something
1408 loadUnqualIfaces ictxt
1409   = initIfaceTcRn $
1410     mapM_ (loadSysInterface doc) (moduleSetElts (mkModuleSet unqual_mods))
1411   where
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")
1419 #endif /* GHCI */
1420 \end{code}
1421
1422 %************************************************************************
1423 %*                                                                      *
1424                 Degugging output
1425 %*                                                                      *
1426 %************************************************************************
1427
1428 \begin{code}
1429 rnDump :: SDoc -> TcRn ()
1430 -- Dump, with a banner, if -ddump-rn
1431 rnDump doc = do { dumpOptTcRn Opt_D_dump_rn (mkDumpDoc "Renamer" doc) }
1432
1433 tcDump :: TcGblEnv -> TcRn ()
1434 tcDump env
1435  = do { dflags <- getDOpts ;
1436
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) ;
1440
1441         -- Dump bindings if -ddump-tc
1442         dumpOptTcRn Opt_D_dump_tc (mkDumpDoc "Typechecker" full_dump)
1443    }
1444   where
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
1449
1450 tcCoreDump mod_guts
1451  = do { dflags <- getDOpts ;
1452         when (dopt Opt_D_dump_types dflags || dopt Opt_D_dump_tc dflags)
1453              (dumpTcRn (pprModGuts mod_guts)) ;
1454
1455         -- Dump bindings if -ddump-tc
1456         dumpOptTcRn Opt_D_dump_tc (mkDumpDoc "Typechecker" full_dump) }
1457   where
1458     full_dump = pprCoreBindings (mg_binds mod_guts)
1459
1460 -- It's unpleasant having both pprModGuts and pprModDetails here
1461 pprTcGblEnv :: TcGblEnv -> SDoc
1462 pprTcGblEnv (TcGblEnv { tcg_type_env  = type_env, 
1463                         tcg_insts     = insts, 
1464                         tcg_fam_insts = fam_insts, 
1465                         tcg_rules     = rules,
1466                         tcg_imports   = imports })
1467   = vcat [ ppr_types insts type_env
1468          , ppr_tycons fam_insts type_env
1469          , ppr_insts insts
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)]
1475
1476 pprModGuts :: ModGuts -> SDoc
1477 pprModGuts (ModGuts { mg_types = type_env,
1478                       mg_rules = rules })
1479   = vcat [ ppr_types [] type_env,
1480            ppr_rules rules ]
1481
1482 ppr_types :: [Instance] -> TypeEnv -> SDoc
1483 ppr_types insts type_env
1484   = text "TYPE SIGNATURES" $$ nest 4 (ppr_sigs ids)
1485   where
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.
1496
1497 ppr_tycons :: [FamInst] -> TypeEnv -> SDoc
1498 ppr_tycons fam_insts type_env
1499   = text "TYPE CONSTRUCTORS" $$ nest 4 (ppr_tydecls tycons)
1500   where
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)
1507
1508 ppr_insts :: [Instance] -> SDoc
1509 ppr_insts []     = empty
1510 ppr_insts ispecs = text "INSTANCES" $$ nest 2 (pprInstances ispecs)
1511
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)
1516
1517 ppr_sigs :: [Var] -> SDoc
1518 ppr_sigs ids
1519         -- Print type signatures; sort by OccName 
1520   = vcat (map ppr_sig (sortLe le_sig ids))
1521   where
1522     le_sig id1 id2 = getOccName id1 <= getOccName id2
1523     ppr_sig id = ppr id <+> dcolon <+> ppr (tidyTopType (idType id))
1524
1525 ppr_tydecls :: [TyCon] -> SDoc
1526 ppr_tydecls tycons
1527         -- Print type constructor info; sort by OccName 
1528   = vcat (map ppr_tycon (sortLe le_sig tycons))
1529   where
1530     le_sig tycon1 tycon2 = getOccName tycon1 <= getOccName tycon2
1531     ppr_tycon tycon 
1532       | isCoercionTyCon tycon = ptext (sLit "coercion") <+> ppr tycon
1533       | otherwise             = ppr (tyThingToIfaceDecl (ATyCon tycon))
1534
1535 ppr_rules :: [CoreRule] -> SDoc
1536 ppr_rules [] = empty
1537 ppr_rules rs = vcat [ptext (sLit "{-# RULES"),
1538                       nest 4 (pprRules rs),
1539                       ptext (sLit "#-}")]
1540
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)))]
1544 \end{code}