Finder

ghc-8.10.7: The GHC API

Safe Haskell | None
Language | Haskell2010

Finder

Synopsis

- flushFinderCaches :: HscEnv -> IO ()
- data FindResult
  - = Found ModLocation Module
  - | NoPackage UnitId
  - | FoundMultiple [(Module, ModuleOrigin)]
  - | NotFound {
    - fr_paths :: [FilePath]
    - fr_pkg :: Maybe UnitId
    - fr_mods_hidden :: [UnitId]
    - fr_pkgs_hidden :: [UnitId]
    - fr_unusables :: [(UnitId, UnusablePackageReason)]
    - fr_suggestions :: [ModuleSuggestion]
    }
- findImportedModule :: HscEnv -> ModuleName -> Maybe FastString -> IO FindResult
- findPluginModule :: HscEnv -> ModuleName -> IO FindResult
- findExactModule :: HscEnv -> InstalledModule -> IO InstalledFindResult
- findHomeModule :: HscEnv -> ModuleName -> IO FindResult
- findExposedPackageModule :: HscEnv -> ModuleName -> Maybe FastString -> IO FindResult
- mkHomeModLocation :: DynFlags -> ModuleName -> FilePath -> IO ModLocation
- mkHomeModLocation2 :: DynFlags -> ModuleName -> FilePath -> String -> IO ModLocation
- mkHiOnlyModLocation :: DynFlags -> Suffix -> FilePath -> String -> IO ModLocation
- mkHiPath :: DynFlags -> FilePath -> String -> FilePath
- mkObjPath :: DynFlags -> FilePath -> String -> FilePath
- addHomeModuleToFinder :: HscEnv -> ModuleName -> ModLocation -> IO Module
- uncacheModule :: HscEnv -> ModuleName -> IO ()
- mkStubPaths :: DynFlags -> ModuleName -> ModLocation -> FilePath
- findObjectLinkableMaybe :: Module -> ModLocation -> IO (Maybe Linkable)
- findObjectLinkable :: Module -> FilePath -> UTCTime -> IO Linkable
- cannotFindModule :: DynFlags -> ModuleName -> FindResult -> SDoc
- cannotFindInterface :: DynFlags -> ModuleName -> InstalledFindResult -> SDoc

# Documentation

flushFinderCaches :: HscEnv -> IO () #

data FindResult #

The result of searching for an imported module.

NB: FindResult manages both user source-import lookups (which can result in `Module`) as well as direct imports for interfaces (which always result in `InstalledModule`).

Constructors

Found ModLocation Module | The module was found
NoPackage UnitId | The requested package was not found
FoundMultiple [(Module, ModuleOrigin)] | _Error_: both in multiple packages
NotFound | Not found
Fields fr_paths :: [FilePath] fr_pkg :: Maybe UnitId fr_mods_hidden :: [UnitId] fr_pkgs_hidden :: [UnitId] fr_unusables :: [(UnitId, UnusablePackageReason)] fr_suggestions :: [ModuleSuggestion]

findImportedModule :: HscEnv -> ModuleName -> Maybe FastString -> IO FindResult #

Locate a module that was imported by the user. We have the module's name, and possibly a package name. Without a package name, this function will use the search path and the known exposed packages to find the module, if a package is specified then only that package is searched for the module.

findPluginModule :: HscEnv -> ModuleName -> IO FindResult #

Locate a plugin module requested by the user, for a compiler plugin. This consults the same set of exposed packages as `findImportedModule`, unless `-hide-all-plugin-packages` or `-plugin-package` are specified.

findExactModule :: HscEnv -> InstalledModule -> IO InstalledFindResult #

Locate a specific `Module`. The purpose of this function is to create a `ModLocation` for a given `Module`, that is to find out where the files associated with this module live. It is used when reading the interface for a module mentioned by another interface, for example (a "system import").

findHomeModule :: HscEnv -> ModuleName -> IO FindResult #

findExposedPackageModule :: HscEnv -> ModuleName -> Maybe FastString -> IO FindResult #

mkHomeModLocation :: DynFlags -> ModuleName -> FilePath -> IO ModLocation #

mkHomeModLocation2 :: DynFlags -> ModuleName -> FilePath -> String -> IO ModLocation #

mkHiOnlyModLocation :: DynFlags -> Suffix -> FilePath -> String -> IO ModLocation #

mkHiPath :: DynFlags -> FilePath -> String -> FilePath #

Constructs the filename of a .hi file for a given source file. Does not check whether the .hi file exists

mkObjPath :: DynFlags -> FilePath -> String -> FilePath #

Constructs the filename of a .o file for a given source file. Does not check whether the .o file exists

addHomeModuleToFinder :: HscEnv -> ModuleName -> ModLocation -> IO Module #

uncacheModule :: HscEnv -> ModuleName -> IO () #

mkStubPaths :: DynFlags -> ModuleName -> ModLocation -> FilePath #

findObjectLinkableMaybe :: Module -> ModLocation -> IO (Maybe Linkable) #

findObjectLinkable :: Module -> FilePath -> UTCTime -> IO Linkable #

cannotFindModule :: DynFlags -> ModuleName -> FindResult -> SDoc #

cannotFindInterface :: DynFlags -> ModuleName -> InstalledFindResult -> SDoc #