ghc-9.4.0.20220721: The GHC API
Safe HaskellSafe-Inferred
LanguageHaskell2010

GHC.Tc.Utils.Backpack

Synopsis

Documentation

findExtraSigImports :: HscEnv -> HscSource -> ModuleName -> IO [ModuleName] Source #

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.

implicitRequirementsShallow :: HscEnv -> [(PkgQual, Located ModuleName)] -> IO ([ModuleName], [InstantiatedUnit]) Source #

Like implicitRequirements', but returns either the module name, if it is a free hole, or the instantiated unit the imported module is from, so that that instantiated unit can be processed and via the batch mod graph (rather than a transitive closure done here) all the free holes are still reachable.

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.

tcRnCheckUnit :: HscEnv -> Unit -> IO (Messages TcRnMessage, Maybe ()) Source #

Top-level driver for signature instantiation (run when compiling an hsig file.)

tcRnMergeSignatures :: HscEnv -> HsParsedModule -> TcGblEnv -> ModIface -> IO (Messages TcRnMessage, Maybe TcGblEnv) Source #

Top-level driver for signature merging (run after typechecking an hsig file).

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.

tcRnInstantiateSignature :: HscEnv -> Module -> RealSrcSpan -> IO (Messages TcRnMessage, Maybe TcGblEnv) Source #

Top-level driver for signature instantiation (run when compiling an hsig file.)

instantiateSignature :: TcRn TcGblEnv Source #

Given tcg_mod, instantiate a ModIface from the indefinite library to use the actual implementations of the relevant entities, checking that the implementation matches the signature.