ghc-7.6.1: The GHC API

Safe HaskellNone

HscMain

Contents

Description

Main API for compiling plain Haskell source code.

This module implements compilation of a Haskell source. It is not concerned with preprocessing of source files; this is handled in DriverPipeline.

There are various entry points depending on what mode we're in: batch mode (--make), one-shot mode (-c, -S etc.), and interactive mode (GHCi). There are also entry points for individual passes: parsing, typechecking/renaming, desugaring, and simplification.

All the functions here take an HscEnv as a parameter, but none of them return a new one: HscEnv is treated as an immutable value from here on in (although it has mutable components, for the caches).

Warning messages are dealt with consistently throughout this API: during compilation warnings are collected, and before any function in HscMain returns, the warnings are either printed, or turned into a real compialtion error if the -Werror flag is enabled.

(c) The GRASP/AQUA Project, Glasgow University, 1993-2000

Synopsis

Making an HscEnv

Compiling complete source files

type Compiler result = HscEnv -> ModSummary -> SourceModified -> Maybe ModIface -> Maybe (Int, Int) -> IO result

data HscStatus' a

Status of a compilation to hard-code or nothing.

Constructors

HscNoRecomp 
HscRecomp (Maybe FilePath) a 

hscCompileOneShot :: Compiler OneShotResult

hscCompileBatch :: Compiler (HscStatus, ModIface, ModDetails)

Compile Haskell, boot and extCore in batch mode.

Running passes separately

hscParse :: HscEnv -> ModSummary -> IO HsParsedModule

parse a file, returning the abstract syntax

hscTypecheckRename :: HscEnv -> ModSummary -> HsParsedModule -> IO (TcGblEnv, RenamedStuff)

Rename and typecheck a module, additionally returning the renamed syntax

hscDesugar :: HscEnv -> ModSummary -> TcGblEnv -> IO ModGuts

Convert a typechecked module to Core

makeSimpleIface :: HscEnv -> Maybe ModIface -> TcGblEnv -> ModDetails -> IO (ModIface, Bool)

Make a ModIface from the results of typechecking. Used when not optimising, and the interface doesn't need to contain any unfoldings or other cross-module optimisation info. ToDo: the old interface is only needed to get the version numbers, we should use fingerprint versions instead.

makeSimpleDetails :: HscEnv -> TcGblEnv -> IO ModDetails

Make a ModDetails from the results of typechecking. Used when typechecking only, as opposed to full compilation.

Backends

Support for interactive evaluation

hscTcRcLookupName :: HscEnv -> Name -> IO (Maybe TyThing)

Lookup things in the compiler's environment

hscCheckSafe :: HscEnv -> Module -> SrcSpan -> IO Bool

Check that a module is safe to import.

We return True to indicate the import is safe and False otherwise although in the False case an exception may be thrown first.

hscGetSafe :: HscEnv -> Module -> SrcSpan -> IO (Bool, [PackageId])

Return if a module is trusted and the pkgs it depends on to be trusted.