TcRnTypes.hs 156 KB
Newer Older
Austin Seipp's avatar
Austin Seipp committed
1 2 3
{-
(c) The University of Glasgow 2006-2012
(c) The GRASP Project, Glasgow University, 1992-2002
4

5 6 7 8 9 10 11 12

Various types used during typechecking, please see TcRnMonad as well for
operations on these types. You probably want to import it, instead of this
module.

All the monads exported here are built on top of the same IOEnv monad. The
monad functions like a Reader monad in the way it passes the environment
around. This is done to allow the environment to be manipulated in a stack
Gabor Greif's avatar
Gabor Greif committed
13
like fashion when entering expressions... etc.
14 15

For state that is global and should be returned at the end (e.g not part
Gabor Greif's avatar
Gabor Greif committed
16
of the stack mechanism), you should use a TcRef (= IORef) to store them.
Austin Seipp's avatar
Austin Seipp committed
17
-}
18

19 20
{-# LANGUAGE CPP, ExistentialQuantification, GeneralizedNewtypeDeriving,
             ViewPatterns #-}
21

22
module TcRnTypes(
23 24
        TcRnIf, TcRn, TcM, RnM, IfM, IfL, IfG, -- The monad is opaque outside this module
        TcRef,
25

26 27 28 29
        -- The environment types
        Env(..),
        TcGblEnv(..), TcLclEnv(..),
        IfGblEnv(..), IfLclEnv(..),
30
        tcVisibleOrphanMods,
31

32 33 34
        -- Frontend types (shouldn't really be here)
        FrontendResult(..),

35
        -- Renamer types
Adam Gundry's avatar
Adam Gundry committed
36
        ErrCtxt, RecFieldEnv,
37
        ImportAvails(..), emptyImportAvails, plusImportAvails,
38
        WhereFrom(..), mkModDeps, modDepsElts,
39

40
        -- Typechecker types
41
        TcTypeEnv, TcBinderStack, TcBinder(..),
42
        TcTyThing(..), PromotionErr(..),
43
        IdBindingInfo(..), ClosedTypeId, RhsNames,
44
        IsGroupClosed(..),
Simon Peyton Jones's avatar
Simon Peyton Jones committed
45
        SelfBootInfo(..),
46
        pprTcTyThingCategory, pprPECategory, CompleteMatch(..),
47

48
        -- Desugaring types
49
        DsM, DsLclEnv(..), DsGblEnv(..),
50 51
        DsMetaEnv, DsMetaVal(..), CompleteMatchMap,
        mkCompleteMatchMap, extendCompleteMatchMap,
52

53
        -- Template Haskell
54 55
        ThStage(..), SpliceType(..), PendingStuff(..),
        topStage, topAnnStage, topSpliceStage,
56
        ThLevel, impLevel, outerLevel, thLevel,
57
        ForeignSrcLang(..),
58

59
        -- Arrows
60
        ArrowCtxt(..),
ross's avatar
ross committed
61

62
        -- TcSigInfo
63
        TcSigFun, TcSigInfo(..), TcIdSigInfo(..),
64
        TcIdSigInst(..), TcPatSynInfo(..),
65
        isPartialSig, hasCompleteSig,
66

67 68 69
        -- QCInst
        QCInst(..), isPendingScInst,

70
        -- Canonical constraints
71 72
        Xi, Ct(..), Cts, emptyCts, andCts, andManyCts, pprCts,
        singleCt, listToCts, ctsElts, consCts, snocCts, extendCtsList,
73
        isEmptyCts, isCTyEqCan, isCFunEqCan,
74
        isPendingScDict, superClassesMightHelp, getPendingWantedScs,
Simon Peyton Jones's avatar
Simon Peyton Jones committed
75
        isCDictCan_Maybe, isCFunEqCan_maybe,
76
        isCNonCanonical, isWantedCt, isDerivedCt,
77
        isGivenCt, isHoleCt, isOutOfScopeCt, isExprHoleCt, isTypeHoleCt,
Eric Seidel's avatar
Eric Seidel committed
78
        isUserTypeErrorCt, getUserTypeErrorMsg,
79
        ctEvidence, ctLoc, setCtLoc, ctPred, ctFlavour, ctEqRel, ctOrigin,
Simon Peyton Jones's avatar
Simon Peyton Jones committed
80
        ctEvId, mkTcEqPredLikeEv,
81
        mkNonCanonical, mkNonCanonicalCt, mkGivens,
82
        mkIrredCt, mkInsolubleCt,
83
        ctEvPred, ctEvLoc, ctEvOrigin, ctEvEqRel,
84
        ctEvExpr, ctEvTerm, ctEvCoercion, ctEvEvId,
85 86
        tyCoVarsOfCt, tyCoVarsOfCts,
        tyCoVarsOfCtList, tyCoVarsOfCtsList,
87

88
        WantedConstraints(..), insolubleWC, emptyWC, isEmptyWC,
89
        isSolvedWC, andWC, unionsWC, mkSimpleWC, mkImplicWC,
90 91
        addInsols, insolublesOnly, addSimples, addImplics,
        tyCoVarsOfWC, dropDerivedWC, dropDerivedSimples,
92
        tyCoVarsOfWCList, insolubleCt, insolubleEqCt,
93
        isDroppableCt, insolubleImplic,
94
        arisesFromGivens,
95

96 97
        Implication(..), newImplication, implicationPrototype,
        implicLclEnv, implicDynFlags,
98
        ImplicStatus(..), isInsolubleStatus, isSolvedStatus,
99
        SubGoalDepth, initialSubGoalDepth, maxSubGoalDepth,
100
        bumpSubGoalDepth, subGoalDepthExceeded,
101
        CtLoc(..), ctLocSpan, ctLocEnv, ctLocLevel, ctLocOrigin,
102
        ctLocTypeOrKind_maybe,
Simon Peyton Jones's avatar
Simon Peyton Jones committed
103
        ctLocDepth, bumpCtLocDepth, isGivenLoc,
104
        setCtLocOrigin, updateCtLocOrigin, setCtLocEnv, setCtLocSpan,
105
        CtOrigin(..), exprCtOrigin, lexprCtOrigin, matchesCtOrigin, grhssCtOrigin,
106
        isVisibleOrigin, toInvisibleOrigin,
107 108
        TypeOrKind(..), isTypeLevel, isKindLevel,
        pprCtOrigin, pprCtLoc,
109
        pushErrCtxt, pushErrCtxtSameOrigin,
110

111

112
        SkolemInfo(..), pprSigSkolInfo, pprSkolInfo,
113

114
        CtEvidence(..), TcEvDest(..),
115
        mkKindLoc, toKindLoc, mkGivenLoc,
116
        isWanted, isGiven, isDerived, isGivenOrWDeriv,
eir@cis.upenn.edu's avatar
eir@cis.upenn.edu committed
117
        ctEvRole,
118

119
        wrapType, wrapTypeWithImplication,
120
        removeBindingShadowing,
121

Adam Gundry's avatar
Adam Gundry committed
122 123 124
        -- Constraint solver plugins
        TcPlugin(..), TcPluginResult(..), TcPluginSolver,
        TcPluginM, runTcPluginM, unsafeTcPluginTcM,
125
        getEvBindsTcPluginM,
Adam Gundry's avatar
Adam Gundry committed
126

127
        CtFlavour(..), ShadowInfo(..), ctEvFlavour,
128
        CtFlavourRole, ctEvFlavourRole, ctFlavourRole,
129 130
        eqCanRewrite, eqCanRewriteFR, eqMayRewriteFR,
        eqCanDischargeFR,
131
        funEqCanDischarge, funEqCanDischargeF,
eir@cis.upenn.edu's avatar
eir@cis.upenn.edu committed
132

133
        -- Pretty printing
Austin Seipp's avatar
Austin Seipp committed
134
        pprEvVarTheta,
135
        pprEvVars, pprEvVarWithType,
136

137
        -- Misc other types
138
        TcId, TcIdSet,
Edward Z. Yang's avatar
Edward Z. Yang committed
139
        Hole(..), holeOcc,
140 141 142 143 144
        NameShape(..),

        -- Role annotations
        RoleAnnotEnv, emptyRoleAnnotEnv, mkRoleAnnotEnv,
        lookupRoleAnnot, getRoleAnnots,
145

146 147 148 149
  ) where

#include "HsVersions.h"

150 151
import GhcPrelude

152
import HsSyn
Facundo Domínguez's avatar
Facundo Domínguez committed
153
import CoreSyn
154
import HscTypes
155
import TcEvidence
156
import Type
157
import Class    ( Class )
158
import TyCon    ( TyCon, TyConFlavour, tyConKind )
David Eichmann's avatar
David Eichmann committed
159
import TyCoRep  ( coHoleCoVar )
160
import Coercion ( Coercion, mkHoleCo )
Gergő Érdi's avatar
Gergő Érdi committed
161
import ConLike  ( ConLike(..) )
162
import DataCon  ( DataCon, dataConUserType, dataConOrigArgTys )
163
import PatSyn   ( PatSyn, pprPatSynType )
164
import Id       ( idType, idName )
Adam Gundry's avatar
Adam Gundry committed
165
import FieldLabel ( FieldLabel )
166
import TcType
167
import Annotations
168 169
import InstEnv
import FamInstEnv
170
import PmExpr
171
import IOEnv
172 173
import RdrName
import Name
174
import NameEnv
175
import NameSet
176
import Avail
177
import Var
178
import FV
179
import VarEnv
180
import Module
181 182 183
import SrcLoc
import VarSet
import ErrUtils
184
import UniqFM
185 186
import UniqSupply
import BasicTypes
187
import Bag
Ian Lynagh's avatar
Ian Lynagh committed
188
import DynFlags
189
import Outputable
190
import ListSetOps
191
import FastString
eir@cis.upenn.edu's avatar
eir@cis.upenn.edu committed
192
import qualified GHC.LanguageExtensions as LangExt
Edward Z. Yang's avatar
Edward Z. Yang committed
193
import Fingerprint
194
import Util
195
import PrelNames ( isUnboundName )
196
import CostCentreState
197

198
import Control.Monad (ap, liftM, msum)
quchen's avatar
quchen committed
199
import qualified Control.Monad.Fail as MonadFail
200
import Data.Set      ( Set )
201
import qualified Data.Set as S
202

203
import Data.List ( sort )
204
import Data.Map ( Map )
205 206
import Data.Dynamic  ( Dynamic )
import Data.Typeable ( TypeRep )
207
import Data.Maybe    ( mapMaybe )
208
import GHCi.Message
209
import GHCi.RemoteTypes
210

211
import qualified Language.Haskell.TH as TH
212

Edward Z. Yang's avatar
Edward Z. Yang committed
213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240
-- | A 'NameShape' is a substitution on 'Name's that can be used
-- to refine the identities of a hole while we are renaming interfaces
-- (see 'RnModIface').  Specifically, a 'NameShape' for
-- 'ns_module_name' @A@, defines a mapping from @{A.T}@
-- (for some 'OccName' @T@) to some arbitrary other 'Name'.
--
-- The most intruiging thing about a 'NameShape', however, is
-- how it's constructed.  A 'NameShape' is *implied* by the
-- exported 'AvailInfo's of the implementor of an interface:
-- if an implementor of signature @<H>@ exports @M.T@, you implicitly
-- define a substitution from @{H.T}@ to @M.T@.  So a 'NameShape'
-- is computed from the list of 'AvailInfo's that are exported
-- by the implementation of a module, or successively merged
-- together by the export lists of signatures which are joining
-- together.
--
-- It's not the most obvious way to go about doing this, but it
-- does seem to work!
--
-- NB: Can't boot this and put it in NameShape because then we
-- start pulling in too many DynFlags things.
data NameShape = NameShape {
        ns_mod_name :: ModuleName,
        ns_exports :: [AvailInfo],
        ns_map :: OccEnv Name
    }


Austin Seipp's avatar
Austin Seipp committed
241 242 243
{-
************************************************************************
*                                                                      *
244
               Standard monad definition for TcRn
245
    All the combinators for the monad can be found in TcRnMonad
Austin Seipp's avatar
Austin Seipp committed
246 247
*                                                                      *
************************************************************************
248

249
The monad itself has to be defined here, because it is mentioned by ErrCtxt
Austin Seipp's avatar
Austin Seipp committed
250
-}
251

Gergő Érdi's avatar
Gergő Érdi committed
252
type TcRnIf a b = IOEnv (Env a b)
253 254 255 256 257 258 259 260 261 262 263 264
type TcRn       = TcRnIf TcGblEnv TcLclEnv    -- Type inference
type IfM lcl    = TcRnIf IfGblEnv lcl         -- Iface stuff
type IfG        = IfM ()                      --    Top level
type IfL        = IfM IfLclEnv                --    Nested
type DsM        = TcRnIf DsGblEnv DsLclEnv    -- Desugaring

-- TcRn is the type-checking and renaming monad: the main monad that
-- most type-checking takes place in.  The global environment is
-- 'TcGblEnv', which tracks all of the top-level type-checking
-- information we've accumulated while checking a module, while the
-- local environment is 'TcLclEnv', which tracks local information as
-- we move inside expressions.
Edward Z. Yang's avatar
Edward Z. Yang committed
265 266 267 268 269 270

-- | Historical "renaming monad" (now it's just 'TcRn').
type RnM  = TcRn

-- | Historical "type-checking monad" (now it's just 'TcRn').
type TcM  = TcRn
271

Rik Steenkamp's avatar
Rik Steenkamp committed
272
-- We 'stack' these envs through the Reader like monad infrastructure
273 274 275
-- as we move into an expression (although the change is focused in
-- the lcl type).
data Env gbl lcl
276
  = Env {
Simon Marlow's avatar
Simon Marlow committed
277
        env_top  :: !HscEnv, -- Top-level stuff that never changes
278
                             -- Includes all info about imported things
Simon Marlow's avatar
Simon Marlow committed
279
                             -- BangPattern is to fix leak, see #15111
280

281
        env_us   :: {-# UNPACK #-} !(IORef UniqSupply),
Rik Steenkamp's avatar
Rik Steenkamp committed
282
                             -- Unique supply for local variables
283

284 285
        env_gbl  :: gbl,     -- Info about things defined at the top level
                             -- of the module being compiled
286

287
        env_lcl  :: lcl      -- Nested stuff; changes as we go into
288
    }
289

Ian Lynagh's avatar
Ian Lynagh committed
290 291 292
instance ContainsDynFlags (Env gbl lcl) where
    extractDynFlags env = hsc_dflags (env_top env)

293 294 295
instance ContainsModule gbl => ContainsModule (Env gbl lcl) where
    extractModule env = extractModule (env_gbl env)

296 297 298 299 300 301 302 303 304 305 306 307

{-
************************************************************************
*                                                                      *
                The interface environments
              Used when dealing with IfaceDecls
*                                                                      *
************************************************************************
-}

data IfGblEnv
  = IfGblEnv {
308 309 310
        -- Some information about where this environment came from;
        -- useful for debugging.
        if_doc :: SDoc,
311 312 313 314 315
        -- The type environment for the module being compiled,
        -- in case the interface refers back to it via a reference that
        -- was originally a hi-boot file.
        -- We need the module name so we can test when it's appropriate
        -- to look in this env.
316
        -- See Note [Tying the knot] in TcIface
317 318 319 320 321 322 323 324 325 326 327
        if_rec_types :: Maybe (Module, IfG TypeEnv)
                -- Allows a read effect, so it can be in a mutable
                -- variable; c.f. handling the external package type env
                -- Nothing => interactive stuff, no loops possible
    }

data IfLclEnv
  = IfLclEnv {
        -- The module for the current IfaceDecl
        -- So if we see   f = \x -> x
        -- it means M.f = \x -> x, where M is the if_mod
Edward Z. Yang's avatar
Edward Z. Yang committed
328 329
        -- NB: This is a semantic module, see
        -- Note [Identity versus semantic module]
330 331
        if_mod :: Module,

332 333 334 335 336
        -- Whether or not the IfaceDecl came from a boot
        -- file or not; we'll use this to choose between
        -- NoUnfolding and BootUnfolding
        if_boot :: Bool,

337 338 339 340 341 342 343
        -- The field is used only for error reporting
        -- if (say) there's a Lint error in it
        if_loc :: SDoc,
                -- Where the interface came from:
                --      .hi file, or GHCi state, or ext core
                -- plus which bit is currently being examined

Edward Z. Yang's avatar
Edward Z. Yang committed
344 345
        if_nsubst :: Maybe NameShape,

346 347 348
        -- This field is used to make sure "implicit" declarations
        -- (anything that cannot be exported in mi_exports) get
        -- wired up correctly in typecheckIfacesForMerging.  Most
349
        -- of the time it's @Nothing@.  See Note [Resolving never-exported Names in TcIface]
350 351 352
        -- in TcIface.
        if_implicits_env :: Maybe TypeEnv,

niteria's avatar
niteria committed
353 354
        if_tv_env  :: FastStringEnv TyVar,     -- Nested tyvar bindings
        if_id_env  :: FastStringEnv Id         -- Nested id binding
355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376
    }

{-
************************************************************************
*                                                                      *
                Desugarer monad
*                                                                      *
************************************************************************

Now the mondo monad magic (yes, @DsM@ is a silly name)---carry around
a @UniqueSupply@ and some annotations, which
presumably include source-file location information:
-}

data DsGblEnv
        = DsGblEnv
        { ds_mod          :: Module             -- For SCC profiling
        , ds_fam_inst_env :: FamInstEnv         -- Like tcg_fam_inst_env
        , ds_unqual  :: PrintUnqualified
        , ds_msgs    :: IORef Messages          -- Warning messages
        , ds_if_env  :: (IfGblEnv, IfLclEnv)    -- Used for looking up global,
                                                -- possibly-imported things
377 378
        , ds_complete_matches :: CompleteMatchMap
           -- Additional complete pattern matches
379 380
        , ds_cc_st   :: IORef CostCentreState
           -- Tracking indices for cost centre annotations
381 382 383 384 385 386 387
        }

instance ContainsModule DsGblEnv where
    extractModule = ds_mod

data DsLclEnv = DsLclEnv {
        dsl_meta    :: DsMetaEnv,        -- Template Haskell bindings
388
        dsl_loc     :: RealSrcSpan,      -- To put in pattern-matching error msgs
Simon Peyton Jones's avatar
Simon Peyton Jones committed
389 390 391 392 393 394 395 396 397

        -- See Note [Note [Type and Term Equality Propagation] in Check.hs
        -- These two fields are augmented as we walk inwards,
        -- through each patttern match in turn
        dsl_dicts   :: Bag EvVar,     -- Constraints from GADT pattern-matching
        dsl_tm_cs   :: Bag SimpleEq,  -- Constraints form term-level pattern matching

        dsl_pm_iter :: IORef Int  -- Number of iterations for pmcheck so far
                                  -- We fail if this gets too big
398 399 400 401 402 403 404 405 406 407 408
     }

-- Inside [| |] brackets, the desugarer looks
-- up variables in the DsMetaEnv
type DsMetaEnv = NameEnv DsMetaVal

data DsMetaVal
   = DsBound Id         -- Bound by a pattern inside the [| |].
                        -- Will be dynamically alpha renamed.
                        -- The Id has type THSyntax.Var

409 410
   | DsSplice (HsExpr GhcTc) -- These bindings are introduced by
                             -- the PendingSplices on a HsBracketOut
411 412 413 414 415 416 417 418 419 420


{-
************************************************************************
*                                                                      *
                Global typechecker environment
*                                                                      *
************************************************************************
-}

421 422 423 424 425 426 427 428
-- | 'FrontendResult' describes the result of running the
-- frontend of a Haskell module.  Usually, you'll get
-- a 'FrontendTypecheck', since running the frontend involves
-- typechecking a program, but for an hs-boot merge you'll
-- just get a ModIface, since no actual typechecking occurred.
--
-- This data type really should be in HscTypes, but it needs
-- to have a TcGblEnv which is only defined here.
429 430 431
data FrontendResult
        = FrontendTypecheck TcGblEnv

Edward Z. Yang's avatar
Edward Z. Yang committed
432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454
-- Note [Identity versus semantic module]
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- When typechecking an hsig file, it is convenient to keep track
-- of two different "this module" identifiers:
--
--      - The IDENTITY module is simply thisPackage + the module
--        name; i.e. it uniquely *identifies* the interface file
--        we're compiling.  For example, p[A=<A>]:A is an
--        identity module identifying the requirement named A
--        from library p.
--
--      - The SEMANTIC module, which is the actual module that
--        this signature is intended to represent (e.g. if
--        we have a identity module p[A=base:Data.IORef]:A,
--        then the semantic module is base:Data.IORef)
--
-- Which one should you use?
--
--      - In the desugarer and later phases of compilation,
--        identity and semantic modules coincide, since we never compile
--        signatures (we just generate blank object files for
--        hsig files.)
--
455 456 457 458 459 460 461
--        A corrolary of this is that the following invariant holds at any point
--        past desugaring,
--
--            if I have a Module, this_mod, in hand representing the module
--            currently being compiled,
--            then moduleUnitId this_mod == thisPackage dflags
--
Edward Z. Yang's avatar
Edward Z. Yang committed
462 463 464 465 466 467 468 469 470 471 472
--      - For any code involving Names, we want semantic modules.
--        See lookupIfaceTop in IfaceEnv, mkIface and addFingerprints
--        in MkIface, and tcLookupGlobal in TcEnv
--
--      - When reading interfaces, we want the identity module to
--        identify the specific interface we want (such interfaces
--        should never be loaded into the EPS).  However, if a
--        hole module <A> is requested, we look for A.hi
--        in the home library we are compiling.  (See LoadIface.)
--        Similarly, in RnNames we check for self-imports using
--        identity modules, to allow signatures to import their implementor.
473 474 475 476
--
--      - For recompilation avoidance, you want the identity module,
--        since that will actually say the specific interface you
--        want to track (and recompile if it changes)
Edward Z. Yang's avatar
Edward Z. Yang committed
477

Edward Z. Yang's avatar
Edward Z. Yang committed
478
-- | 'TcGblEnv' describes the top-level of the module at the
479 480
-- point at which the typechecker is finished work.
-- It is this structure that is handed on to the desugarer
481
-- For state that needs to be updated during the typechecking
Edward Z. Yang's avatar
Edward Z. Yang committed
482
-- phase and returned at end, use a 'TcRef' (= 'IORef').
483 484
data TcGblEnv
  = TcGblEnv {
485
        tcg_mod     :: Module,         -- ^ Module being compiled
Edward Z. Yang's avatar
Edward Z. Yang committed
486 487
        tcg_semantic_mod :: Module,    -- ^ If a signature, the backing module
            -- See also Note [Identity versus semantic module]
488
        tcg_src     :: HscSource,
489
          -- ^ What kind of module (regular Haskell, hs-boot, hsig)
490

491 492
        tcg_rdr_env :: GlobalRdrEnv,   -- ^ Top level envt; used during renaming
        tcg_default :: Maybe [Type],
493
          -- ^ Types used for defaulting. @Nothing@ => no @default@ decl
494

495 496
        tcg_fix_env   :: FixityEnv,     -- ^ Just for things in this module
        tcg_field_env :: RecFieldEnv,   -- ^ Just for things in this module
497
                                        -- See Note [The interactive package] in HscTypes
498

499
        tcg_type_env :: TypeEnv,
500
          -- ^ Global type env for the module we are compiling now.  All
501 502 503 504 505
          -- TyCons and Classes (for this module) end up in here right away,
          -- along with their derived constructors, selectors.
          --
          -- (Ids defined in this module start in the local envt, though they
          --  move to the global envt during zonking)
506 507 508
          --
          -- NB: for what "things in this module" means, see
          -- Note [The interactive package] in HscTypes
509 510 511 512 513 514 515

        tcg_type_env_var :: TcRef TypeEnv,
                -- Used only to initialise the interface-file
                -- typechecker in initIfaceTcRn, so that it can see stuff
                -- bound in this module when dealing with hi-boot recursions
                -- Updated at intervals (e.g. after dealing with types and classes)

Simon Marlow's avatar
Simon Marlow committed
516
        tcg_inst_env     :: !InstEnv,
517
          -- ^ Instance envt for all /home-package/ modules;
518
          -- Includes the dfuns in tcg_insts
Simon Marlow's avatar
Simon Marlow committed
519 520 521
          -- NB. BangPattern is to fix a leak, see #15111
        tcg_fam_inst_env :: !FamInstEnv, -- ^ Ditto for family instances
          -- NB. BangPattern is to fix a leak, see #15111
522
        tcg_ann_env      :: AnnEnv,     -- ^ And for annotations
523 524 525 526 527 528 529

                -- Now a bunch of things about this module that are simply
                -- accumulated, but never consulted until the end.
                -- Nevertheless, it's convenient to accumulate them along
                -- with the rest of the info from this module.
        tcg_exports :: [AvailInfo],     -- ^ What is exported
        tcg_imports :: ImportAvails,
530
          -- ^ Information about what was imported from where, including
531
          -- things bound in this module. Also store Safe Haskell info
Edward Z. Yang's avatar
Edward Z. Yang committed
532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556
          -- here about transitive trusted package requirements.
          --
          -- There are not many uses of this field, so you can grep for
          -- all them.
          --
          -- The ImportAvails records information about the following
          -- things:
          --
          --    1. All of the modules you directly imported (tcRnImports)
          --    2. The orphans (only!) of all imported modules in a GHCi
          --       session (runTcInteractive)
          --    3. The module that instantiated a signature
          --    4. Each of the signatures that merged in
          --
          -- It is used in the following ways:
          --    - imp_orphs is used to determine what orphan modules should be
          --      visible in the context (tcVisibleOrphanMods)
          --    - imp_finsts is used to determine what family instances should
          --      be visible (tcExtendLocalFamInstEnv)
          --    - To resolve the meaning of the export list of a module
          --      (tcRnExports)
          --    - imp_mods is used to compute usage info (mkIfaceTc, deSugar)
          --    - imp_trust_own_pkg is used for Safe Haskell in interfaces
          --      (mkIfaceTc, as well as in HscMain)
          --    - To create the Dependencies field in interface (mkDependencies)
557

558 559
        tcg_dus       :: DefUses,   -- ^ What is defined in this module and what is used.
        tcg_used_gres :: TcRef [GlobalRdrElt],  -- ^ Records occurrences of imported entities
David Eichmann's avatar
David Eichmann committed
560 561
          -- One entry for each occurrence; but may have different GREs for
          -- the same Name See Note [Tracking unused binding and imports]
562

563
        tcg_keep :: TcRef NameSet,
564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581
          -- ^ Locally-defined top-level names to keep alive.
          --
          -- "Keep alive" means give them an Exported flag, so that the
          -- simplifier does not discard them as dead code, and so that they
          -- are exposed in the interface file (but not to export to the
          -- user).
          --
          -- Some things, like dict-fun Ids and default-method Ids are "born"
          -- with the Exported flag on, for exactly the above reason, but some
          -- we only discover as we go.  Specifically:
          --
          --   * The to/from functions for generic data types
          --
          --   * Top-level variables appearing free in the RHS of an orphan
          --     rule
          --
          --   * Top-level variables appearing free in a TH bracket

582
        tcg_th_used :: TcRef Bool,
583 584
          -- ^ @True@ <=> Template Haskell syntax used.
          --
585
          -- We need this so that we can generate a dependency on the
Gabor Greif's avatar
typos  
Gabor Greif committed
586
          -- Template Haskell package, because the desugarer is going
587 588
          -- to emit loads of references to TH symbols.  The reference
          -- is implicit rather than explicit, so we have to zap a
589 590
          -- mutable variable.

591 592 593 594 595
        tcg_th_splice_used :: TcRef Bool,
          -- ^ @True@ <=> A Template Haskell splice was used.
          --
          -- Splices disable recompilation avoidance (see #481)

596 597 598 599
        tcg_th_top_level_locs :: TcRef (Set RealSrcSpan),
          -- ^ Locations of the top-level splices; used for providing details on
          -- scope in error messages for out-of-scope variables

600
        tcg_dfun_n  :: TcRef OccSet,
601
          -- ^ Allows us to choose unique DFun names.
602

Edward Z. Yang's avatar
Edward Z. Yang committed
603 604 605 606
        tcg_merged :: [(Module, Fingerprint)],
          -- ^ The requirements we merged with; we always have to recompile
          -- if any of these changed.

607
        -- The next fields accumulate the payload of the module
Gabor Greif's avatar
Gabor Greif committed
608
        -- The binds, rules and foreign-decl fields are collected
609
        -- initially in un-zonked form and are finally zonked in tcRnSrcDecls
610

alexbiehl's avatar
alexbiehl committed
611
        tcg_rn_exports :: Maybe [(Located (IE GhcRn), Avails)],
612
                -- Nothing <=> no explicit export list
613
                -- Is always Nothing if we don't want to retain renamed
alexbiehl's avatar
alexbiehl committed
614 615 616
                -- exports.
                -- If present contains each renamed export list item
                -- together with its exported names.
617

618
        tcg_rn_imports :: [LImportDecl GhcRn],
619 620
                -- Keep the renamed imports regardless.  They are not
                -- voluminous and are needed if you want to report unused imports
simonpj@microsoft.com's avatar
simonpj@microsoft.com committed
621

622
        tcg_rn_decls :: Maybe (HsGroup GhcRn),
623 624
          -- ^ Renamed decls, maybe.  @Nothing@ <=> Don't retain renamed
          -- decls.
625

626
        tcg_dependent_files :: TcRef [FilePath], -- ^ dependencies from addDependentFile
GregWeber's avatar
GregWeber committed
627

628
        tcg_th_topdecls :: TcRef [LHsDecl GhcPs],
629 630
        -- ^ Top-level declarations from addTopDecls

631
        tcg_th_foreign_files :: TcRef [(ForeignSrcLang, FilePath)],
632
        -- ^ Foreign files emitted from TH.
633

634 635
        tcg_th_topnames :: TcRef NameSet,
        -- ^ Exact names bound in top-level declarations in tcg_th_topdecls
636

637
        tcg_th_modfinalizers :: TcRef [(TcLclEnv, ThModFinalizers)],
638 639
        -- ^ Template Haskell module finalizers.
        --
640
        -- They can use particular local environments.
641

642 643 644
        tcg_th_coreplugins :: TcRef [String],
        -- ^ Core plugins added by Template Haskell code.

645
        tcg_th_state :: TcRef (Map TypeRep Dynamic),
646
        tcg_th_remote_state :: TcRef (Maybe (ForeignRef (IORef QState))),
647
        -- ^ Template Haskell state
648

649
        tcg_ev_binds  :: Bag EvBind,        -- Top-level evidence bindings
650

651 652 653
        -- Things defined in this module, or (in GHCi)
        -- in the declarations for a single GHCi command.
        -- For the latter, see Note [The interactive package] in HscTypes
654
        tcg_tr_module :: Maybe Id,   -- Id for $trModule :: GHC.Types.Module
655 656
                                             -- for which every module has a top-level defn
                                             -- except in GHCi in which case we have Nothing
657
        tcg_binds     :: LHsBinds GhcTc,     -- Value bindings in this module
658 659 660 661 662 663 664
        tcg_sigs      :: NameSet,            -- ...Top-level names that *lack* a signature
        tcg_imp_specs :: [LTcSpecPrag],      -- ...SPECIALISE prags for imported Ids
        tcg_warns     :: Warnings,           -- ...Warnings and deprecations
        tcg_anns      :: [Annotation],       -- ...Annotations
        tcg_tcs       :: [TyCon],            -- ...TyCons and Classes
        tcg_insts     :: [ClsInst],          -- ...Instances
        tcg_fam_insts :: [FamInst],          -- ...Family instances
665 666 667
        tcg_rules     :: [LRuleDecl GhcTc],  -- ...Rules
        tcg_fords     :: [LForeignDecl GhcTc], -- ...Foreign import & exports
        tcg_patsyns   :: [PatSyn],            -- ...Pattern synonyms
668

669
        tcg_doc_hdr   :: Maybe LHsDocString, -- ^ Maybe Haddock header docs
Simon Marlow's avatar
Simon Marlow committed
670
        tcg_hpc       :: !AnyHpcUsage,       -- ^ @True@ if any part of the
671
                                             --  prog uses hpc instrumentation.
Simon Marlow's avatar
Simon Marlow committed
672
           -- NB. BangPattern is to fix a leak, see #15111
673

Simon Peyton Jones's avatar
Simon Peyton Jones committed
674 675 676
        tcg_self_boot :: SelfBootInfo,       -- ^ Whether this module has a
                                             -- corresponding hi-boot file

677
        tcg_main      :: Maybe Name,         -- ^ The Name of the main
678 679
                                             -- function, if this module is
                                             -- the main module.
Adam Gundry's avatar
Adam Gundry committed
680

681 682 683 684 685
        tcg_safeInfer :: TcRef (Bool, WarningMessages),
        -- ^ Has the typechecker inferred this module as -XSafe (Safe Haskell)
        -- See Note [Safe Haskell Overlapping Instances Implementation],
        -- although this is used for more than just that failure case.

Facundo Domínguez's avatar
Facundo Domínguez committed
686
        tcg_tc_plugins :: [TcPluginSolver],
687
        -- ^ A list of user-defined plugins for the constraint solver.
Facundo Domínguez's avatar
Facundo Domínguez committed
688

Edward Z. Yang's avatar
Edward Z. Yang committed
689 690 691
        tcg_top_loc :: RealSrcSpan,
        -- ^ The RealSrcSpan this module came from

692 693
        tcg_static_wc :: TcRef WantedConstraints,
          -- ^ Wanted constraints of static forms.
694
        -- See Note [Constraints in static forms].
695 696 697 698
        tcg_complete_matches :: [CompleteMatch],

        -- ^ Tracking indices for cost centre annotations
        tcg_cc_st   :: TcRef CostCentreState
699
    }
700

Edward Z. Yang's avatar
Edward Z. Yang committed
701 702 703
-- NB: topModIdentity, not topModSemantic!
-- Definition sites of orphan identities will be identity modules, not semantic
-- modules.
704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725

-- Note [Constraints in static forms]
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
--
-- When a static form produces constraints like
--
-- f :: StaticPtr (Bool -> String)
-- f = static show
--
-- we collect them in tcg_static_wc and resolve them at the end
-- of type checking. They need to be resolved separately because
-- we don't want to resolve them in the context of the enclosing
-- expression. Consider
--
-- g :: Show a => StaticPtr (a -> String)
-- g = static show
--
-- If the @Show a0@ constraint that the body of the static form produces was
-- resolved in the context of the enclosing expression, then the body of the
-- static form wouldn't be closed because the Show dictionary would come from
-- g's context instead of coming from the top level.

726 727 728 729
tcVisibleOrphanMods :: TcGblEnv -> ModuleSet
tcVisibleOrphanMods tcg_env
    = mkModuleSet (tcg_mod tcg_env : imp_orphs (tcg_imports tcg_env))

730
instance ContainsModule TcGblEnv where
Edward Z. Yang's avatar
Edward Z. Yang committed
731
    extractModule env = tcg_semantic_mod env
732

Adam Gundry's avatar
Adam Gundry committed
733 734 735
type RecFieldEnv = NameEnv [FieldLabel]
        -- Maps a constructor name *in this module*
        -- to the fields for that constructor.
736 737 738 739 740
        -- This is used when dealing with ".." notation in record
        -- construction and pattern matching.
        -- The FieldEnv deals *only* with constructors defined in *this*
        -- module.  For imported modules, we get the same info from the
        -- TypeEnv
741

Simon Peyton Jones's avatar
Simon Peyton Jones committed
742 743 744 745
data SelfBootInfo
  = NoSelfBoot    -- No corresponding hi-boot file
  | SelfBoot
       { sb_mds :: ModDetails   -- There was a hi-boot file,
746 747 748 749
       , sb_tcs :: NameSet }    -- defining these TyCons,
-- What is sb_tcs used for?  See Note [Extra dependencies from .hs-boot files]
-- in RnSource

Simon Peyton Jones's avatar
Simon Peyton Jones committed
750

751 752 753 754
{- Note [Tracking unused binding and imports]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
We gather two sorts of usage information

755 756 757 758 759 760 761 762
 * tcg_dus (defs/uses)
      Records *defined* Names (local, top-level)
          and *used*    Names (local or imported)

      Used (a) to report "defined but not used"
               (see RnNames.reportUnusedNames)
           (b) to generate version-tracking usage info in interface
               files (see MkIface.mkUsedNames)
763
   This usage info is mainly gathered by the renamer's
764 765
   gathering of free-variables

766
 * tcg_used_gres
767
      Used only to report unused import declarations
768 769 770 771 772 773 774

      Records each *occurrence* an *imported* (not locally-defined) entity.
      The occurrence is recorded by keeping a GlobalRdrElt for it.
      These is not the GRE that is in the GlobalRdrEnv; rather it
      is recorded *after* the filtering done by pickGREs.  So it reflect
      /how that occurrence is in scope/.   See Note [GRE filtering] in
      RdrName.
Adam Gundry's avatar
Adam Gundry committed
775

776

Austin Seipp's avatar
Austin Seipp committed
777 778
************************************************************************
*                                                                      *
779
                The local typechecker environment
Austin Seipp's avatar
Austin Seipp committed
780 781
*                                                                      *
************************************************************************
782

Edward Z. Yang's avatar
Edward Z. Yang committed
783 784
Note [The Global-Env/Local-Env story]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
785
During type checking, we keep in the tcg_type_env
786 787
        * All types and classes
        * All Ids derived from types and classes (constructors, selectors)
788 789 790

At the end of type checking, we zonk the local bindings,
and as we do so we add to the tcg_type_env
791
        * Locally defined top-level Ids
792 793

Why?  Because they are now Ids not TcIds.  This final GlobalEnv is
794 795 796
        a) fed back (via the knot) to typechecking the
           unfoldings of interface signatures
        b) used in the ModDetails of this module
Austin Seipp's avatar
Austin Seipp committed
797
-}
798

799 800
data TcLclEnv           -- Changes as we move inside an expression
                        -- Discarded after typecheck/rename; not passed on to desugarer
801
  = TcLclEnv {
802
        tcl_loc        :: RealSrcSpan,     -- Source span
803
        tcl_ctxt       :: [ErrCtxt],       -- Error context, innermost on top
804
        tcl_tclvl      :: TcLevel,         -- Birthplace for new unification variables
805

806
        tcl_th_ctxt    :: ThStage,         -- Template Haskell context
807 808 809 810 811
        tcl_th_bndrs   :: ThBindEnv,       -- and binder info
            -- The ThBindEnv records the TH binding level of in-scope Names
            -- defined in this module (not imported)
            -- We can't put this info in the TypeEnv because it's needed
            -- (and extended) in the renamer, for untyed splices
812

813 814 815 816 817 818 819 820 821 822
        tcl_arrow_ctxt :: ArrowCtxt,       -- Arrow-notation context

        tcl_rdr :: LocalRdrEnv,         -- Local name envt
                -- Maintained during renaming, of course, but also during
                -- type checking, solely so that when renaming a Template-Haskell
                -- splice we have the right environment for the renamer.
                --
                --   Does *not* include global name envt; may shadow it
                --   Includes both ordinary variables and type variables;
                --   they are kept distinct because tyvar have a different
Gabor Greif's avatar
Gabor Greif committed
823
                --   occurrence constructor (Name.TvOcc)
824 825 826 827 828
                -- We still need the unsullied global name env so that
                --   we can look up record field names

        tcl_env  :: TcTypeEnv,    -- The local type environment:
                                  -- Ids and TyVars defined in this module
829

830 831
        tcl_bndrs :: TcBinderStack,   -- Used for reporting relevant bindings,
                                      -- and for tidying types
832 833 834 835 836

        tcl_tyvars :: TcRef TcTyVarSet, -- The "global tyvars"
                        -- Namely, the in-scope TyVars bound in tcl_env,
                        -- plus the tyvars mentioned in the types of Ids bound
                        -- in tcl_lenv.
837
                        -- Why mutable? see notes with tcGetGlobalTyCoVars
838

839 840
        tcl_lie  :: TcRef WantedConstraints,    -- Place to accumulate type constraints
        tcl_errs :: TcRef Messages              -- Place to accumulate errors
841 842
    }

843 844 845 846 847 848 849 850
type ErrCtxt = (Bool, TidyEnv -> TcM (TidyEnv, MsgDoc))
        -- Monadic so that we have a chance
        -- to deal with bound type variables just before error
        -- message construction

        -- Bool:  True <=> this is a landmark context; do not
        --                 discard it when trimming for display

851
type TcTypeEnv = NameEnv TcTyThing
852

853 854 855 856 857 858 859 860 861
type ThBindEnv = NameEnv (TopLevelFlag, ThLevel)
   -- Domain = all Ids bound in this module (ie not imported)
   -- The TopLevelFlag tells if the binding is syntactically top level.
   -- We need to know this, because the cross-stage persistence story allows
   -- cross-stage at arbitrary types if the Id is bound at top level.
   --
   -- Nota bene: a ThLevel of 'outerLevel' is *not* the same as being
   -- bound at top level!  See Note [Template Haskell levels] in TcSplice

862 863
{- Note [Given Insts]
   ~~~~~~~~~~~~~~~~~~
864
Because of GADTs, we have to pass inwards the Insts provided by type signatures
865
and existential contexts. Consider
866 867 868
        data T a where { T1 :: b -> b -> T [b] }
        f :: Eq a => T a -> Bool
        f (T1 x y) = [x]==[y]
869 870

The constructor T1 binds an existential variable 'b', and we need Eq [b].
871
Well, we have it, because Eq a refines to Eq [b], but we can only spot that if we
872 873 874
pass it inwards.

-}
875

876 <