Agda-2.6.2.1.20220320: A dependently typed functional programming language and proof assistant
Safe HaskellSafe-Inferred
LanguageHaskell2010

Agda.Interaction.FindFile

Description

Functions which map between module names and file names.

Note that file name lookups are cached in the TCState. The code assumes that no Agda source files are added or removed from the include directories while the code is being type checked.

Synopsis

Documentation

newtype SourceFile Source #

Type aliases for source files and interface files. We may only produce one of these if we know for sure that the file does exist. We can always output an AbsolutePath if we are not sure.

Constructors

SourceFile 

toIFile :: SourceFile -> TCM AbsolutePath Source #

Converts an Agda file name to the corresponding interface file name. Note that we do not guarantee that the file exists.

mkInterfaceFile Source #

Arguments

:: AbsolutePath

Path to the candidate interface file

-> IO (Maybe InterfaceFile)

Interface file iff it exists

Makes an interface file from an AbsolutePath candidate. If the file does not exist, then fail by returning Nothing.

data FindError Source #

Errors which can arise when trying to find a source file.

Invariant: All paths are absolute.

Constructors

NotFound [SourceFile]

The file was not found. It should have had one of the given file names.

Ambiguous [SourceFile]

Several matching files were found.

Invariant: The list of matching files has at least two elements.

findErrorToTypeError :: TopLevelModuleName -> FindError -> TypeError Source #

Given the module name which the error applies to this function converts a FindError to a TypeError.

findFile :: TopLevelModuleName -> TCM SourceFile Source #

Finds the source file corresponding to a given top-level module name. The returned paths are absolute.

Raises an error if the file cannot be found.

findFile' :: TopLevelModuleName -> TCM (Either FindError SourceFile) Source #

Tries to find the source file corresponding to a given top-level module name. The returned paths are absolute.

SIDE EFFECT: Updates stModuleToSource.

findFile'' Source #

Arguments

:: [AbsolutePath]

Include paths.

-> TopLevelModuleName 
-> ModuleToSource

Cached invocations of findFile''. An updated copy is returned.

-> IO (Either FindError SourceFile, ModuleToSource) 

A variant of findFile' which does not require TCMT.

findInterfaceFile' Source #

Arguments

:: SourceFile

Path to the source file

-> TCM (Maybe InterfaceFile)

Maybe path to the interface file

Finds the interface file corresponding to a given top-level module file. The returned paths are absolute.

Raises Nothing if the the interface file cannot be found.

findInterfaceFile :: TopLevelModuleName -> TCM (Maybe InterfaceFile) Source #

Finds the interface file corresponding to a given top-level module file. The returned paths are absolute.

Raises an error if the source file cannot be found, and returns Nothing if the source file can be found but not the interface file.

checkModuleName Source #

Arguments

:: TopLevelModuleName

The name of the module.

-> SourceFile

The file from which it was loaded.

-> Maybe TopLevelModuleName

The expected name, coming from an import statement.

-> TCM () 

Ensures that the module name matches the file name. The file corresponding to the module name (according to the include path) has to be the same as the given file name.

moduleName Source #

Arguments

:: AbsolutePath

The path to the file.

-> Module

The parsed module.

-> TCM TopLevelModuleName 

Computes the module name of the top-level module in the given file.

If no top-level module name is given, then an attempt is made to use the file name as a module name.