TcRnTypes.hs 149 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 49
        -- Desugaring types
        DsM, DsLclEnv(..), DsGblEnv(..), PArrBuiltin(..),
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
        -- Canonical constraints
68 69
        Xi, Ct(..), Cts, emptyCts, andCts, andManyCts, pprCts,
        singleCt, listToCts, ctsElts, consCts, snocCts, extendCtsList,
70
        isEmptyCts, isCTyEqCan, isCFunEqCan,
71
        isPendingScDict, superClassesMightHelp,
Simon Peyton Jones's avatar
Simon Peyton Jones committed
72
        isCDictCan_Maybe, isCFunEqCan_maybe,
73
        isCNonCanonical, isWantedCt, isDerivedCt,
74
        isGivenCt, isHoleCt, isOutOfScopeCt, isExprHoleCt, isTypeHoleCt,
Eric Seidel's avatar
Eric Seidel committed
75
        isUserTypeErrorCt, getUserTypeErrorMsg,
76
        ctEvidence, ctLoc, setCtLoc, ctPred, ctFlavour, ctEqRel, ctOrigin,
Simon Peyton Jones's avatar
Simon Peyton Jones committed
77
        ctEvId, mkTcEqPredLikeEv,
78
        mkNonCanonical, mkNonCanonicalCt, mkGivens,
79
        mkIrredCt, mkInsolubleCt,
80
        ctEvPred, ctEvLoc, ctEvOrigin, ctEvEqRel,
81
        ctEvExpr, ctEvCoercion, ctEvEvId,
82 83
        tyCoVarsOfCt, tyCoVarsOfCts,
        tyCoVarsOfCtList, tyCoVarsOfCtsList,
84

85
        WantedConstraints(..), insolubleWC, emptyWC, isEmptyWC,
86
        andWC, unionsWC, mkSimpleWC, mkImplicWC,
87 88 89
        addInsols, insolublesOnly, addSimples, addImplics,
        tyCoVarsOfWC, dropDerivedWC, dropDerivedSimples,
        tyCoVarsOfWCList, insolubleWantedCt, insolubleEqCt,
90
        isDroppableCt, insolubleImplic,
91
        arisesFromGivens,
92

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

107

108
        SkolemInfo(..), pprSigSkolInfo, pprSkolInfo,
109
        termEvidenceAllowed,
110

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

116
        wrapType, wrapTypeWithImplication,
117

Adam Gundry's avatar
Adam Gundry committed
118 119 120
        -- Constraint solver plugins
        TcPlugin(..), TcPluginResult(..), TcPluginSolver,
        TcPluginM, runTcPluginM, unsafeTcPluginTcM,
121
        getEvBindsTcPluginM,
Adam Gundry's avatar
Adam Gundry committed
122

123
        CtFlavour(..), ShadowInfo(..), ctEvFlavour,
124
        CtFlavourRole, ctEvFlavourRole, ctFlavourRole,
125 126
        eqCanRewrite, eqCanRewriteFR, eqMayRewriteFR,
        eqCanDischargeFR,
127
        funEqCanDischarge, funEqCanDischargeF,
eir@cis.upenn.edu's avatar
eir@cis.upenn.edu committed
128

129
        -- Pretty printing
Austin Seipp's avatar
Austin Seipp committed
130
        pprEvVarTheta,
131
        pprEvVars, pprEvVarWithType,
132

133
        -- Misc other types
134
        TcId, TcIdSet,
Edward Z. Yang's avatar
Edward Z. Yang committed
135
        Hole(..), holeOcc,
136 137 138 139 140
        NameShape(..),

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

142 143 144 145
  ) where

#include "HsVersions.h"

146 147
import GhcPrelude

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

194
import Control.Monad (ap, liftM, msum)
quchen's avatar
quchen committed
195
import qualified Control.Monad.Fail as MonadFail
196
import Data.Set      ( Set )
197
import qualified Data.Set as S
198

199
import Data.List ( sort )
200
import Data.Map ( Map )
201 202
import Data.Dynamic  ( Dynamic )
import Data.Typeable ( TypeRep )
203
import Data.Maybe    ( mapMaybe )
204
import GHCi.Message
205
import GHCi.RemoteTypes
206

207
import qualified Language.Haskell.TH as TH
208

Edward Z. Yang's avatar
Edward Z. Yang committed
209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236
-- | 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
237 238 239
{-
************************************************************************
*                                                                      *
240
               Standard monad definition for TcRn
241
    All the combinators for the monad can be found in TcRnMonad
Austin Seipp's avatar
Austin Seipp committed
242 243
*                                                                      *
************************************************************************
244

245
The monad itself has to be defined here, because it is mentioned by ErrCtxt
Austin Seipp's avatar
Austin Seipp committed
246
-}
247

cactus's avatar
cactus committed
248
type TcRnIf a b = IOEnv (Env a b)
249 250 251 252 253 254 255 256 257 258 259 260
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
261 262 263 264 265 266

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

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

Rik Steenkamp's avatar
Rik Steenkamp committed
268
-- We 'stack' these envs through the Reader like monad infrastructure
269 270 271
-- as we move into an expression (although the change is focused in
-- the lcl type).
data Env gbl lcl
272
  = Env {
273 274
        env_top  :: HscEnv,  -- Top-level stuff that never changes
                             -- Includes all info about imported things
275

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

279 280
        env_gbl  :: gbl,     -- Info about things defined at the top level
                             -- of the module being compiled
281

282
        env_lcl  :: lcl      -- Nested stuff; changes as we go into
283
    }
284

Ian Lynagh's avatar
Ian Lynagh committed
285 286 287
instance ContainsDynFlags (Env gbl lcl) where
    extractDynFlags env = hsc_dflags (env_top env)

288 289 290
instance ContainsModule gbl => ContainsModule (Env gbl lcl) where
    extractModule env = extractModule (env_gbl env)

291 292 293 294 295 296 297 298 299 300 301 302

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

data IfGblEnv
  = IfGblEnv {
303 304 305
        -- Some information about where this environment came from;
        -- useful for debugging.
        if_doc :: SDoc,
306 307 308 309 310
        -- 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.
311
        -- See Note [Tying the knot] in TcIface
312 313 314 315 316 317 318 319 320 321 322
        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
323 324
        -- NB: This is a semantic module, see
        -- Note [Identity versus semantic module]
325 326
        if_mod :: Module,

327 328 329 330 331
        -- 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,

332 333 334 335 336 337 338
        -- 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
339 340
        if_nsubst :: Maybe NameShape,

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

niteria's avatar
niteria committed
348 349
        if_tv_env  :: FastStringEnv TyVar,     -- Nested tyvar bindings
        if_id_env  :: FastStringEnv Id         -- Nested id binding
350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394
    }

{-
************************************************************************
*                                                                      *
                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:
-}

-- If '-XParallelArrays' is given, the desugarer populates this table with the corresponding
-- variables found in 'Data.Array.Parallel'.
--
data PArrBuiltin
        = PArrBuiltin
        { lengthPVar         :: Var     -- ^ lengthP
        , replicatePVar      :: Var     -- ^ replicateP
        , singletonPVar      :: Var     -- ^ singletonP
        , mapPVar            :: Var     -- ^ mapP
        , filterPVar         :: Var     -- ^ filterP
        , zipPVar            :: Var     -- ^ zipP
        , crossMapPVar       :: Var     -- ^ crossMapP
        , indexPVar          :: Var     -- ^ (!:)
        , emptyPVar          :: Var     -- ^ emptyP
        , appPVar            :: Var     -- ^ (+:+)
        , enumFromToPVar     :: Var     -- ^ enumFromToP
        , enumFromThenToPVar :: Var     -- ^ enumFromThenToP
        }

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
        , ds_dph_env :: GlobalRdrEnv            -- exported entities of 'Data.Array.Parallel.Prim'
                                                -- iff '-fvectorise' flag was given as well as
                                                -- exported entities of 'Data.Array.Parallel' iff
                                                -- '-XParallelArrays' was given; otherwise, empty
Gabor Greif's avatar
Gabor Greif committed
395
        , ds_parr_bi :: PArrBuiltin             -- desugarer names for '-XParallelArrays'
396 397
        , ds_complete_matches :: CompleteMatchMap
           -- Additional complete pattern matches
398 399
        , ds_cc_st   :: IORef CostCentreState
           -- Tracking indices for cost centre annotations
400 401 402 403 404 405 406
        }

instance ContainsModule DsGblEnv where
    extractModule = ds_mod

data DsLclEnv = DsLclEnv {
        dsl_meta    :: DsMetaEnv,        -- Template Haskell bindings
407 408
        dsl_loc     :: RealSrcSpan,      -- To put in pattern-matching error msgs
        dsl_dicts   :: Bag EvVar,        -- Constraints from GADT pattern-matching
409 410
        dsl_tm_cs   :: Bag SimpleEq,
        dsl_pm_iter :: IORef Int         -- no iterations for pmcheck
411 412 413 414 415 416 417 418 419 420 421
     }

-- 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

422 423
   | DsSplice (HsExpr GhcTc) -- These bindings are introduced by
                             -- the PendingSplices on a HsBracketOut
424 425 426 427 428 429 430 431 432 433


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

434 435 436 437 438 439 440 441
-- | '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.
442 443 444
data FrontendResult
        = FrontendTypecheck TcGblEnv

Edward Z. Yang's avatar
Edward Z. Yang committed
445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467
-- 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.)
--
468 469 470 471 472 473 474
--        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
475 476 477 478 479 480 481 482 483 484 485
--      - 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.
486 487 488 489
--
--      - 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
490

Edward Z. Yang's avatar
Edward Z. Yang committed
491
-- | 'TcGblEnv' describes the top-level of the module at the
492 493
-- point at which the typechecker is finished work.
-- It is this structure that is handed on to the desugarer
494
-- For state that needs to be updated during the typechecking
Edward Z. Yang's avatar
Edward Z. Yang committed
495
-- phase and returned at end, use a 'TcRef' (= 'IORef').
496 497
data TcGblEnv
  = TcGblEnv {
498
        tcg_mod     :: Module,         -- ^ Module being compiled
Edward Z. Yang's avatar
Edward Z. Yang committed
499 500
        tcg_semantic_mod :: Module,    -- ^ If a signature, the backing module
            -- See also Note [Identity versus semantic module]
501
        tcg_src     :: HscSource,
502
          -- ^ What kind of module (regular Haskell, hs-boot, hsig)
503

504 505
        tcg_rdr_env :: GlobalRdrEnv,   -- ^ Top level envt; used during renaming
        tcg_default :: Maybe [Type],
506
          -- ^ Types used for defaulting. @Nothing@ => no @default@ decl
507

508 509
        tcg_fix_env   :: FixityEnv,     -- ^ Just for things in this module
        tcg_field_env :: RecFieldEnv,   -- ^ Just for things in this module
510
                                        -- See Note [The interactive package] in HscTypes
511

512
        tcg_type_env :: TypeEnv,
513
          -- ^ Global type env for the module we are compiling now.  All
514 515 516 517 518
          -- 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)
519 520 521
          --
          -- NB: for what "things in this module" means, see
          -- Note [The interactive package] in HscTypes
522 523 524 525 526 527 528 529 530

        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)

        tcg_inst_env     :: InstEnv,
          -- ^ Instance envt for all /home-package/ modules;
531
          -- Includes the dfuns in tcg_insts
532
        tcg_fam_inst_env :: FamInstEnv, -- ^ Ditto for family instances
533
        tcg_ann_env      :: AnnEnv,     -- ^ And for annotations
534 535 536 537 538 539 540

                -- 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,
541
          -- ^ Information about what was imported from where, including
542
          -- things bound in this module. Also store Safe Haskell info
Edward Z. Yang's avatar
Edward Z. Yang committed
543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567
          -- 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)
568

569 570
        tcg_dus       :: DefUses,   -- ^ What is defined in this module and what is used.
        tcg_used_gres :: TcRef [GlobalRdrElt],  -- ^ Records occurrences of imported entities
571
          -- See Note [Tracking unused binding and imports]
572

573
        tcg_keep :: TcRef NameSet,
574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591
          -- ^ 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

592
        tcg_th_used :: TcRef Bool,
593 594
          -- ^ @True@ <=> Template Haskell syntax used.
          --
595
          -- We need this so that we can generate a dependency on the
Gabor Greif's avatar
typos  
Gabor Greif committed
596
          -- Template Haskell package, because the desugarer is going
597 598
          -- to emit loads of references to TH symbols.  The reference
          -- is implicit rather than explicit, so we have to zap a
599 600
          -- mutable variable.

601 602 603 604 605
        tcg_th_splice_used :: TcRef Bool,
          -- ^ @True@ <=> A Template Haskell splice was used.
          --
          -- Splices disable recompilation avoidance (see #481)

606 607 608 609
        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

610
        tcg_dfun_n  :: TcRef OccSet,
611
          -- ^ Allows us to choose unique DFun names.
612

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

617
        -- The next fields accumulate the payload of the module
Gabor Greif's avatar
Gabor Greif committed
618
        -- The binds, rules and foreign-decl fields are collected
619
        -- initially in un-zonked form and are finally zonked in tcRnSrcDecls
620

alexbiehl's avatar
alexbiehl committed
621
        tcg_rn_exports :: Maybe [(Located (IE GhcRn), Avails)],
622
                -- Nothing <=> no explicit export list
623
                -- Is always Nothing if we don't want to retain renamed
alexbiehl's avatar
alexbiehl committed
624 625 626
                -- exports.
                -- If present contains each renamed export list item
                -- together with its exported names.
627

628
        tcg_rn_imports :: [LImportDecl GhcRn],
629 630
                -- 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
631

632
        tcg_rn_decls :: Maybe (HsGroup GhcRn),
633 634
          -- ^ Renamed decls, maybe.  @Nothing@ <=> Don't retain renamed
          -- decls.
635

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

638
        tcg_th_topdecls :: TcRef [LHsDecl GhcPs],
639 640
        -- ^ Top-level declarations from addTopDecls

641 642
        tcg_th_foreign_files :: TcRef [(ForeignSrcLang, String)],
        -- ^ Foreign files emitted from TH.
643

644 645
        tcg_th_topnames :: TcRef NameSet,
        -- ^ Exact names bound in top-level declarations in tcg_th_topdecls
646

647 648 649 650 651
        tcg_th_modfinalizers :: TcRef [TcM ()],
        -- ^ Template Haskell module finalizers.
        --
        -- They are computations in the @TcM@ monad rather than @Q@ because we
        -- set them to use particular local environments.
652

653 654 655
        tcg_th_coreplugins :: TcRef [String],
        -- ^ Core plugins added by Template Haskell code.

656
        tcg_th_state :: TcRef (Map TypeRep Dynamic),
657
        tcg_th_remote_state :: TcRef (Maybe (ForeignRef (IORef QState))),
658
        -- ^ Template Haskell state
659

660
        tcg_ev_binds  :: Bag EvBind,        -- Top-level evidence bindings
661

662 663 664
        -- 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
665
        tcg_tr_module :: Maybe Id,   -- Id for $trModule :: GHC.Types.Module
666 667
                                             -- for which every module has a top-level defn
                                             -- except in GHCi in which case we have Nothing
668
        tcg_binds     :: LHsBinds GhcTc,     -- Value bindings in this module
669 670 671 672 673 674 675
        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
676 677 678 679
        tcg_rules     :: [LRuleDecl GhcTc],  -- ...Rules
        tcg_fords     :: [LForeignDecl GhcTc], -- ...Foreign import & exports
        tcg_vects     :: [LVectDecl GhcTc],   -- ...Vectorisation declarations
        tcg_patsyns   :: [PatSyn],            -- ...Pattern synonyms
680

681
        tcg_doc_hdr   :: Maybe LHsDocString, -- ^ Maybe Haddock header docs
682 683 684
        tcg_hpc       :: AnyHpcUsage,        -- ^ @True@ if any part of the
                                             --  prog uses hpc instrumentation.

Simon Peyton Jones's avatar
Simon Peyton Jones committed
685 686 687
        tcg_self_boot :: SelfBootInfo,       -- ^ Whether this module has a
                                             -- corresponding hi-boot file

688
        tcg_main      :: Maybe Name,         -- ^ The Name of the main
689 690
                                             -- function, if this module is
                                             -- the main module.
Adam Gundry's avatar
Adam Gundry committed
691

692 693 694 695 696
        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
697
        tcg_tc_plugins :: [TcPluginSolver],
698
        -- ^ A list of user-defined plugins for the constraint solver.
Facundo Domínguez's avatar
Facundo Domínguez committed
699

Edward Z. Yang's avatar
Edward Z. Yang committed
700 701 702
        tcg_top_loc :: RealSrcSpan,
        -- ^ The RealSrcSpan this module came from

703 704
        tcg_static_wc :: TcRef WantedConstraints,
          -- ^ Wanted constraints of static forms.
705
        -- See Note [Constraints in static forms].
706 707 708 709
        tcg_complete_matches :: [CompleteMatch],

        -- ^ Tracking indices for cost centre annotations
        tcg_cc_st   :: TcRef CostCentreState
710
    }
711

Edward Z. Yang's avatar
Edward Z. Yang committed
712 713 714
-- NB: topModIdentity, not topModSemantic!
-- Definition sites of orphan identities will be identity modules, not semantic
-- modules.
715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736

-- 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.

737 738 739 740
tcVisibleOrphanMods :: TcGblEnv -> ModuleSet
tcVisibleOrphanMods tcg_env
    = mkModuleSet (tcg_mod tcg_env : imp_orphs (tcg_imports tcg_env))

741
instance ContainsModule TcGblEnv where
Edward Z. Yang's avatar
Edward Z. Yang committed
742
    extractModule env = tcg_semantic_mod env
743

Adam Gundry's avatar
Adam Gundry committed
744 745 746
type RecFieldEnv = NameEnv [FieldLabel]
        -- Maps a constructor name *in this module*
        -- to the fields for that constructor.
747 748 749 750 751
        -- 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
752

Simon Peyton Jones's avatar
Simon Peyton Jones committed
753 754 755 756
data SelfBootInfo
  = NoSelfBoot    -- No corresponding hi-boot file
  | SelfBoot
       { sb_mds :: ModDetails   -- There was a hi-boot file,
757 758 759 760
       , 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
761

762 763 764 765
{- Note [Tracking unused binding and imports]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
We gather two sorts of usage information

766 767 768 769 770 771 772 773
 * 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)
774
   This usage info is mainly gathered by the renamer's
775 776
   gathering of free-variables

777
 * tcg_used_gres
778
      Used only to report unused import declarations
779 780 781 782 783 784 785

      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
786

787

Austin Seipp's avatar
Austin Seipp committed
788 789
************************************************************************
*                                                                      *
790
                The local typechecker environment
Austin Seipp's avatar
Austin Seipp committed
791 792
*                                                                      *
************************************************************************
793

Edward Z. Yang's avatar
Edward Z. Yang committed
794 795
Note [The Global-Env/Local-Env story]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
796
During type checking, we keep in the tcg_type_env
797 798
        * All types and classes
        * All Ids derived from types and classes (constructors, selectors)
799 800 801

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

Why?  Because they are now Ids not TcIds.  This final GlobalEnv is
805 806 807
        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
808
-}
809

810 811
data TcLclEnv           -- Changes as we move inside an expression
                        -- Discarded after typecheck/rename; not passed on to desugarer
812
  = TcLclEnv {
813
        tcl_loc        :: RealSrcSpan,     -- Source span
814
        tcl_ctxt       :: [ErrCtxt],       -- Error context, innermost on top
815
        tcl_tclvl      :: TcLevel,         -- Birthplace for new unification variables
816

817
        tcl_th_ctxt    :: ThStage,         -- Template Haskell context
818 819 820 821 822
        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
823

824 825 826 827 828 829 830 831 832 833
        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
834
                --   occurrence constructor (Name.TvOcc)
835 836 837 838 839
                -- 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
840

841 842
        tcl_bndrs :: TcBinderStack,   -- Used for reporting relevant bindings,
                                      -- and for tidying types
843 844 845 846 847

        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.
848
                        -- Why mutable? see notes with tcGetGlobalTyCoVars
849

850 851
        tcl_lie  :: TcRef WantedConstraints,    -- Place to accumulate type constraints
        tcl_errs :: TcRef Messages              -- Place to accumulate errors
852 853
    }

854 855 856 857 858 859 860 861
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

862
type TcTypeEnv = NameEnv TcTyThing
863

864 865 866 867 868 869 870 871 872
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

873 874
{- Note [Given Insts]
   ~~~~~~~~~~~~~~~~~~
875
Because of GADTs, we have to pass inwards the Insts provided by type signatures
876
and existential contexts. Consider
877 878 879
        data T a where { T1 :: b -> b -> T [b] }
        f :: Eq a => T a -> Bool
        f (T1 x y) = [x]==[y]
880 881

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

-}
886

887 888 889 890 891 892 893 894
-- | Type alias for 'IORef'; the convention is we'll use this for mutable
-- bits of data in 'TcGblEnv' which are updated during typechecking and
-- returned at the end.
type TcRef a     = IORef a
-- ToDo: when should I refer to it as a 'TcId' instead of an 'Id'?
type TcId        = Id
type TcIdSet     = IdSet

895
---------------------------
896
-- The TcBinderStack
897 898
---------------------------

899 900 901 902 903
type TcBinderStack = [TcBinder]
   -- This is a stack of locally-bound ids and tyvars,
   --   innermost on top
   -- Used only in error reporting (relevantBindings in TcError),
   --   and in tidying
Simon Peyton Jones's avatar
Simon Peyton Jones committed
904 905
   -- We can't use the tcl_env type environment, because it doesn't
   --   keep track of the nesting order
906

907
data TcBinder
908 909
  = TcIdBndr
       TcId
Gabor Greif's avatar
Gabor Greif committed
910
       TopLevelFlag    -- Tells whether the binding is syntactically top-level
911 912
                       -- (The monomorphic Ids for a recursive group count
                       --  as not-top-level for this purpose.)
913

914 915 916 917 918
  | TcIdBndr_ExpType  -- Variant that allows the type to be specified as
                      -- an ExpType
       Name
       ExpType
       TopLevelFlag
919

920 921 922 923 924 925
  | TcTvBndr          -- e.g.   case x of P (y::a) -> blah
       Name           -- We bind the lexical name "a" to the type of y,
       TyVar          -- which might be an utterly different (perhaps
                      -- existential) tyvar

instance Outputable TcBinder where
926 927
   ppr (TcIdBndr id top_lvl)           = ppr id <> brackets (ppr top_lvl)
   ppr (TcIdBndr_ExpType id _ top_lvl) = ppr id <> brackets (ppr top_lvl)
928
   ppr (TcTvBndr name tv)              = ppr name <+> ppr tv
929

930 931 932 933
instance HasOccName TcBinder where
    occName (TcIdBndr id _)             = occName (idName id)
    occName (TcIdBndr_ExpType name _ _) = occName name
    occName (TcTvBndr name _)           = occName name
934

935
---------------------------
936
-- Template Haskell stages and levels
937 938
---------------------------

939 940
data SpliceType = Typed | Untyped

941
data ThStage    -- See Note [Template Haskell state diagram] in TcSplice
942 943 944 945
  = Splice SpliceType -- Inside a top-level splice
                      -- This code will be run *at compile time*;
                      --   the result replaces the splice
                      -- Binding level = 0
946

947 948 949 950 951 952 953 954 955 956 957 958 959 960 961
  | RunSplice (TcRef [ForeignRef (TH.Q ())])
      -- Set when running a splice, i.e. NOT when renaming or typechecking the
      -- Haskell code for the splice. See Note [RunSplice ThLevel].
      --
      -- Contains a list of mod finalizers collected while executing the splice.
      --
      -- 'addModFinalizer' inserts finalizers here, and from here they are taken
      -- to construct an @HsSpliced@ annotation for untyped splices. See Note
      -- [Delaying modFinalizers in untyped splices] in "RnSplice".
      --
      -- For typed splices, the typechecker takes finalizers from here and
      -- inserts them in the list of finalizers in the global environment.
      --
      -- See Note [Collecting modFinalizers in typed splices] in "TcSplice".

962 963
  | Comp        -- Ordinary Haskell code
                -- Binding level = 1
964

965
  | Brack                       -- Inside brackets
966 967 968 969 970 971 972 973 974
      ThStage                   --   Enclosing stage
      PendingStuff

data PendingStuff
  = RnPendingUntyped              -- Renaming the inside of an *untyped* bracket
      (TcRef [PendingRnSplice])   -- Pending splices in here

  | RnPendingTyped                -- Renaming the inside of a *typed* bracket

975
  | TcPending                     -- Typechecking the inside of a typed bracket
976 977
      (TcRef [PendingTcSplice])   --   Accumulate pending splices here
      (TcRef WantedConstraints)   --     and type constraints here