ghc-8.2.2: The GHC API

Safe HaskellNone




This module provides an interface for typechecker plugins to access select functions of the TcM, principally those to do with reading parts of the state.


Basic TcPluginM functionality

data TcPluginM a #

tcPluginIO :: IO a -> TcPluginM a #

Perform some IO, typically to interact with an external tool.

tcPluginTrace :: String -> SDoc -> TcPluginM () #

Output useful for debugging the compiler.

unsafeTcPluginTcM :: TcM a -> TcPluginM a #

This function provides an escape for direct access to the TcM monad. It should not be used lightly, and the provided TcPluginM API should be favoured instead.

Finding Modules and Names

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


Found ModLocation Module

The module was found

NoPackage UnitId

The requested package was not found

FoundMultiple [(Module, ModuleOrigin)]

_Error_: both in multiple packages


Not found

Looking up Names in the typechecking environment

Getting the TcM state

Type variables


Creating constraints

newWanted :: CtLoc -> PredType -> TcPluginM CtEvidence #

Create a new wanted constraint.

newDerived :: CtLoc -> PredType -> TcPluginM CtEvidence #

Create a new derived constraint.

newGiven :: CtLoc -> PredType -> EvTerm -> TcPluginM CtEvidence #

Create a new given constraint, with the supplied evidence. This must not be invoked from tcPluginInit or tcPluginStop, or it will panic.

newCoercionHole :: TcPluginM CoercionHole #

Create a fresh coercion hole.

Manipulating evidence bindings

newEvVar :: PredType -> TcPluginM EvVar #

Create a fresh evidence variable.

setEvBind :: EvBind -> TcPluginM () #

Bind an evidence variable. This must not be invoked from tcPluginInit or tcPluginStop, or it will panic.

getEvBindsTcPluginM :: TcPluginM EvBindsVar #

Access the EvBindsVar carried by the TcPluginM during constraint solving. Returns Nothing if invoked during tcPluginInit or tcPluginStop.