ghc-9.4.5: The GHC API
Safe HaskellSafe-Inferred



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.



data Plugins Source #




  • staticPlugins :: ![StaticPlugin]

    Static plugins which do not need dynamic loading. These plugins are intended to be added by GHC API users directly to this list.

    To add dynamically loaded plugins through the GHC API see addPluginModuleName instead.

  • loadedPlugins :: ![LoadedPlugin]

    Plugins dynamically loaded after processing arguments. What will be loaded here is directed by DynFlags.pluginModNames. Arguments are loaded from DynFlags.pluginModNameOpts.

    The purpose of this field is to cache the plugins so they don't have to be loaded each time they are needed. See initializePlugins.

  • loadedPluginDeps :: !([Linkable], PkgsLoaded)

    The object files required by the loaded plugins See Note [Plugin dependencies]

data Plugin Source #

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.




defaultPlugin :: Plugin Source #

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 Source #

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

data PsMessages Source #

Errors and warnings produced by the parser

data ParsedResult Source #

Result of running the parser and the parser plugin




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) Source #

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

Defaulting plugins

Defaulting plugins can add candidate types to the defaulting mechanism.

Hole fit plugins

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

data HoleFitPluginR Source #

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.


data PluginWithArgs Source #




data LoadedPlugin Source #

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




data StaticPlugin Source #

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




withPlugins :: Monad m => Plugins -> PluginOperation m a -> a -> m a Source #

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

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

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