Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Typechecking a whole module
https://gitlab.haskell.org/ghc/ghc/wikis/commentary/compiler/type-checker
Synopsis
- tcRnStmt :: HscEnv -> GhciLStmt GhcPs -> IO (Messages DecoratedSDoc, Maybe ([Id], LHsExpr GhcTc, FixityEnv))
- tcRnExpr :: HscEnv -> TcRnExprMode -> LHsExpr GhcPs -> IO (Messages DecoratedSDoc, Maybe Type)
- data TcRnExprMode
- tcRnType :: HscEnv -> ZonkFlexi -> Bool -> LHsType GhcPs -> IO (Messages DecoratedSDoc, Maybe (Type, Kind))
- tcRnImportDecls :: HscEnv -> [LImportDecl GhcPs] -> IO (Messages DecoratedSDoc, Maybe GlobalRdrEnv)
- tcRnLookupRdrName :: HscEnv -> LocatedN RdrName -> IO (Messages DecoratedSDoc, Maybe [Name])
- getModuleInterface :: HscEnv -> Module -> IO (Messages DecoratedSDoc, Maybe ModIface)
- tcRnDeclsi :: HscEnv -> [LHsDecl GhcPs] -> IO (Messages DecoratedSDoc, Maybe TcGblEnv)
- isGHCiMonad :: HscEnv -> String -> IO (Messages DecoratedSDoc, Maybe Name)
- runTcInteractive :: HscEnv -> TcRn a -> IO (Messages DecoratedSDoc, Maybe a)
- tcRnLookupName :: HscEnv -> Name -> IO (Messages DecoratedSDoc, Maybe TyThing)
- tcRnGetInfo :: HscEnv -> Name -> IO (Messages DecoratedSDoc, Maybe (TyThing, Fixity, [ClsInst], [FamInst], SDoc))
- tcRnModule :: HscEnv -> ModSummary -> Bool -> HsParsedModule -> IO (Messages DecoratedSDoc, Maybe TcGblEnv)
- tcRnModuleTcRnM :: HscEnv -> ModSummary -> HsParsedModule -> (Module, SrcSpan) -> TcRn TcGblEnv
- tcTopSrcDecls :: HsGroup GhcRn -> TcM (TcGblEnv, TcLclEnv)
- rnTopSrcDecls :: HsGroup GhcPs -> TcM (TcGblEnv, HsGroup GhcRn)
- checkBootDecl :: Bool -> TyThing -> TyThing -> Maybe SDoc
- checkHiBootIface' :: [ClsInst] -> TypeEnv -> [AvailInfo] -> ModDetails -> TcM [(Id, Id)]
- findExtraSigImports :: HscEnv -> HscSource -> ModuleName -> IO [(Maybe FastString, Located ModuleName)]
- implicitRequirements :: HscEnv -> [(Maybe FastString, Located ModuleName)] -> IO [(Maybe FastString, Located ModuleName)]
- checkUnit :: Unit -> TcM ()
- mergeSignatures :: HsParsedModule -> TcGblEnv -> ModIface -> TcRn TcGblEnv
- tcRnMergeSignatures :: HscEnv -> HsParsedModule -> TcGblEnv -> ModIface -> IO (Messages DecoratedSDoc, Maybe TcGblEnv)
- instantiateSignature :: TcRn TcGblEnv
- tcRnInstantiateSignature :: HscEnv -> Module -> RealSrcSpan -> IO (Messages DecoratedSDoc, Maybe TcGblEnv)
- loadUnqualIfaces :: HscEnv -> InteractiveContext -> TcM ()
- badReexportedBootThing :: Bool -> Name -> Name -> SDoc
- checkBootDeclM :: Bool -> TyThing -> TyThing -> TcM ()
- missingBootThing :: Bool -> Name -> String -> SDoc
- getRenamedStuff :: TcGblEnv -> RenamedStuff
- type RenamedStuff = Maybe (HsGroup GhcRn, [LImportDecl GhcRn], Maybe [(LIE GhcRn, Avails)], Maybe LHsDocString)
Documentation
tcRnStmt :: HscEnv -> GhciLStmt GhcPs -> IO (Messages DecoratedSDoc, Maybe ([Id], LHsExpr GhcTc, FixityEnv)) Source #
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 [ () ], a list of the bound values, coerced to ().
tcRnExpr :: HscEnv -> TcRnExprMode -> LHsExpr GhcPs -> IO (Messages DecoratedSDoc, Maybe Type) Source #
tcRnExpr just finds the type of an expression for :type
data TcRnExprMode Source #
How should we infer a type? See Note [TcRnExprMode]
TM_Inst | Instantiate inferred quantifiers only (:type) |
TM_Default | Instantiate all quantifiers, and do eager defaulting (:type +d) |
tcRnType :: HscEnv -> ZonkFlexi -> Bool -> LHsType GhcPs -> IO (Messages DecoratedSDoc, Maybe (Type, Kind)) Source #
tcRnImportDecls :: HscEnv -> [LImportDecl GhcPs] -> IO (Messages DecoratedSDoc, Maybe GlobalRdrEnv) Source #
tcRnLookupRdrName :: HscEnv -> LocatedN RdrName -> IO (Messages DecoratedSDoc, Maybe [Name]) Source #
Find all the Names that this RdrName could mean, in GHCi
getModuleInterface :: HscEnv -> Module -> IO (Messages DecoratedSDoc, Maybe ModIface) Source #
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.
isGHCiMonad :: HscEnv -> String -> IO (Messages DecoratedSDoc, Maybe Name) Source #
runTcInteractive :: HscEnv -> TcRn a -> IO (Messages DecoratedSDoc, Maybe a) Source #
tcRnLookupName :: HscEnv -> Name -> IO (Messages DecoratedSDoc, Maybe TyThing) Source #
tcRnGetInfo :: HscEnv -> Name -> IO (Messages DecoratedSDoc, Maybe (TyThing, Fixity, [ClsInst], [FamInst], SDoc)) Source #
tcRnModule :: HscEnv -> ModSummary -> Bool -> HsParsedModule -> IO (Messages DecoratedSDoc, Maybe TcGblEnv) Source #
Top level entry point for typechecker and renamer
tcRnModuleTcRnM :: HscEnv -> ModSummary -> HsParsedModule -> (Module, SrcSpan) -> TcRn TcGblEnv Source #
checkBootDecl :: Bool -> TyThing -> TyThing -> Maybe SDoc Source #
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.
checkHiBootIface' :: [ClsInst] -> TypeEnv -> [AvailInfo] -> ModDetails -> TcM [(Id, Id)] Source #
findExtraSigImports :: HscEnv -> HscSource -> ModuleName -> IO [(Maybe FastString, Located ModuleName)] Source #
findExtraSigImports
, but in a convenient form for GHC.Driver.Make and
GHC.Tc.Module.
implicitRequirements :: HscEnv -> [(Maybe FastString, Located ModuleName)] -> IO [(Maybe FastString, Located ModuleName)] Source #
checkUnit :: Unit -> TcM () Source #
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.
mergeSignatures :: HsParsedModule -> TcGblEnv -> ModIface -> TcRn TcGblEnv Source #
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.
tcRnMergeSignatures :: HscEnv -> HsParsedModule -> TcGblEnv -> ModIface -> IO (Messages DecoratedSDoc, Maybe TcGblEnv) Source #
Top-level driver for signature merging (run after typechecking
an hsig
file).
tcRnInstantiateSignature :: HscEnv -> Module -> RealSrcSpan -> IO (Messages DecoratedSDoc, Maybe TcGblEnv) Source #
Top-level driver for signature instantiation (run when compiling
an hsig
file.)
loadUnqualIfaces :: HscEnv -> InteractiveContext -> TcM () Source #
Compares two things for equivalence between boot-file and normal code, reporting an error if they don't match up.
getRenamedStuff :: TcGblEnv -> RenamedStuff Source #
Extract the renamed information from TcGblEnv.
type RenamedStuff = Maybe (HsGroup GhcRn, [LImportDecl GhcRn], Maybe [(LIE GhcRn, Avails)], Maybe LHsDocString) Source #