ghc-7.2.2: The GHC API




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.


Making an HscEnv

Compiling complete source files

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

Running passes separately

hscParse :: HscEnv -> ModSummary -> IO (Located (HsModule RdrName))Source

parse a file, returning the abstract syntax

hscTypecheckRename :: HscEnv -> ModSummary -> Located (HsModule RdrName) -> IO (TcGblEnv, RenamedStuff)Source

Rename and typecheck a module, additionally returning the renamed syntax

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

Convert a typechecked module to Core

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

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 ModDetailsSource

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


Support for interactive evaluation

hscRnImportDecls :: HscEnv -> Module -> [LImportDecl RdrName] -> IO GlobalRdrEnvSource

Rename some import declarations

hscTcRnLookupRdrName :: HscEnv -> RdrName -> IO [Name]Source

Lookup things in the compiler's environment



:: HscEnv 
-> String 
-> IO (Maybe ([Id], HValue))

Nothing == empty statement (or comment only), but no parse error



:: HscEnv 
-> String 
-> String 
-> Int

starting line

-> IO (Maybe ([Id], HValue))

Nothing == empty statement (or comment only), but no parse error



:: HscEnv 
-> String

The type

-> IO Kind 

Find the kind of a type