The returned [Id] is the list of new Ids bound by this statement. It can be used to extend the InteractiveContext via extendInteractiveContext.
The returned TypecheckedHsExpr is of type IO [ Any ], a list of the bound values, coerced to Any.
:: a typeCtrl KGHC 9.10.3 · lts/ghc-9.10.x · 248f8f0 · 2026-10-05
Moduleghc-9.10.3GHC2021
Typechecking a whole module
https://gitlab.haskell.org/ghc/ghc/wikis/commentary/compiler/type-checker
The returned [Id] is the list of new Ids bound by this statement. It can be used to extend the InteractiveContext via extendInteractiveContext.
The returned TypecheckedHsExpr is of type IO [ Any ], a list of the bound values, coerced to Any.
tcRnExpr just finds the type of an expression for :type
How should we infer a type? See Note [TcRnExprMode]
TM_InstInstantiate inferred quantifiers only (:type)
TM_DefaultInstantiate all quantifiers, and do eager defaulting (:type +d)
Find all the Names that this RdrName could mean, in GHCi
ASSUMES that the module is either in the HomePackageTable or is
a package module with an interface on disk. If neither of these is
true, then the result will be an error indicating the interface
could not be found.
Top level entry point for typechecker and renamer
Compares the two things for equivalence between boot-file and normal
code. Returns Nothing on success or Just "some helpful info for user"
failure. If the difference will be apparent to the user, Just empty is
perfectly suitable.
For a module modname of type HscSource, determine the list
of extra "imports" of other requirements which should be considered part of
the import of the requirement, because it transitively depends on those
requirements by imports of modules from other packages. The situation
is something like this:
unit p where signature X signature Y import X
unit q where dependency p[X=<A>,Y=<B>] signature A signature B
Although q's B does not directly import A, we still have to make sure we process A first, because the merging process will cause B to indirectly import A. This function finds the TRANSITIVE closure of all such imports we need to make.
Given a Unit, make sure it is well typed. This is because unit IDs come from Cabal, which does not know if things are well-typed or not; a component may have been filled with implementations for the holes that don't actually fulfill the requirements.
Given a local ModIface, merge all inherited requirements from requirementMerges into this signature, producing a final TcGblEnv that matches the local signature and all required signatures.
Top-level driver for signature merging (run after typechecking
an hsig file).
Top-level driver for signature instantiation (run when compiling
an hsig file.)
Compares two things for equivalence between boot-file and normal code, reporting an error if they don't match up.
Extract the renamed information from TcGblEnv.