ghc-9.2.8: The GHC API
Safe HaskellSafe-Inferred
LanguageHaskell2010

GHC.Driver.Plugins

Description

Definitions for writing plugins for GHC. Plugins can hook into several areas of the compiler. See the Plugin type. These plugins include type-checker plugins, source plugins, and core-to-core plugins.

Synopsis

Plugins

data Plugin #

Plugin is the compiler plugin data type. Try to avoid constructing one of these directly, and just modify some fields of defaultPlugin instead: this is to try and preserve source-code compatibility when we add fields to this.

Nonetheless, this API is preliminary and highly likely to change in the future.

Constructors

Plugin 

Fields

defaultPlugin :: Plugin #

Default plugin: does nothing at all, except for marking that safe inference has failed unless -fplugin-trustworthy is passed. For compatibility reason you should base all your plugin definitions on this default value.

type CommandLineOption = String #

Command line options gathered from the -PModule.Name:stuff syntax are given to you as this type

Recompilation checking

Plugin types

Frontend plugins

Core plugins

Core plugins allow plugins to register as a Core-to-Core pass.

Typechecker plugins

Typechecker plugins allow plugins to provide evidence to the typechecker.

Source plugins

GHC offers a number of points where plugins can access and modify its front-end ("source") representation. These include:

keepRenamedSource :: [CommandLineOption] -> TcGblEnv -> HsGroup GhcRn -> TcM (TcGblEnv, HsGroup GhcRn) #

A renamer plugin which mades the renamed source available in a typechecker plugin.

Hole fit plugins

hole fit plugins allow plugins to change the behavior of valid hole fit suggestions

data HoleFitPluginR #

HoleFitPluginR adds a TcRef to hole fit plugins so that plugins can track internal state. Note the existential quantification, ensuring that the state cannot be modified from outside the plugin.

Internal

data PluginWithArgs #

Constructors

PluginWithArgs 

Fields

data LoadedPlugin #

A plugin with its arguments. The result of loading the plugin.

Constructors

LoadedPlugin 

Fields

data StaticPlugin #

A static plugin with its arguments. For registering compiled-in plugins through the GHC API.

Constructors

StaticPlugin 

Fields

mapPlugins :: HscEnv -> (Plugin -> [CommandLineOption] -> a) -> [a] #

withPlugins :: Monad m => HscEnv -> PluginOperation m a -> a -> m a #

Perform an operation by using all of the plugins in turn.

withPlugins_ :: Monad m => HscEnv -> ConstPluginOperation m a -> a -> m () #

Perform a constant operation by using all of the plugins in turn.