HORIZON HASKELLDocslts/ghc-9.10.xc74966e2026-09-27Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · c74966e · 2026-09-27

Moduleghc-9.10.3GHC2021

GHC.Driver.Main

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 GHC.Driver.Pipeline

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).

We use the Hsc monad to deal with warning messages consistently: specifically, while executing within an Hsc monad, warnings are collected. When a Hsc monad returns to an IO monad, the warnings are printed, or compilation aborts if the -Werror flag is enabled.

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

  • 5 types
  • 61 values
  • Packageghc-9.10.3
  • Exports66
  • LanguageGHC2021
  • LicenceBSD-3-Clause
  • SourceMain.hs

Making an HscEnv

3 declarations

Compiling complete source files

15 declarations
datadata HscBackendAction
#

Action to perform in backend compilation

Constructors

Instances1Outputable

Running passes separately

8 declarations

Safe Haskell

2 declarations
valuehscCheckSafe :: 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.

Support for interactive evaluation

24 declarations
datadata TcRnExprMode
#

How should we infer a type? See Note [TcRnExprMode]

Constructors

  • TM_Inst

    Instantiate inferred quantifiers only (:type)

  • TM_Default

    Instantiate all quantifiers, and do eager defaulting (:type +d)

valuehscKcType
  1. :: HscEnv
  2. -> Bool

    Normalise the type

  3. -> String

    The type as a string

  4. -> IO (Type, Kind)

    Resulting type (possibly normalised) and kind

#

Find the kind of a type, after generalisation

Low-level exports for hooks

14 declarations
valueioMsgMaybe :: IO (Messages GhcMessage, Maybe a) -> Hsc a
#

Deal with errors and warnings returned by a compilation step

In order to reduce dependencies to other parts of the compiler, functions outside the "main" parts of GHC return warnings and errors as a parameter and signal success via by wrapping the result in a Maybe type. This function logs the returned warnings and propagates errors as exceptions (of type SourceError).

This function assumes the following invariants:

  1. If the second result indicates success (is of the form 'Just x'), there must be no error messages in the first result.

  2. If there are no error messages, but the second result indicates failure there should be warnings in the first result. That is, if the action failed, it must have been due to the warnings (i.e., -Werror).