Patch/feature proposal: "Source plugins"
Edsko de Vries
edskodevries at gmail.com
Wed Jun 5 13:18:03 CEST 2013
Uuuuuh. I'm sorry, I don't know why that email got sent, I was still
writing it. Please ignore it for now, will send the full version later :)
On Wed, Jun 5, 2013 at 12:14 PM, Edsko de Vries <edskodevries at gmail.com>wrote:
> Hi all,
>
> The plugin mechanism gives access to the program in Core; this suffices
> for many but not quite all purposes. Tools that need access to the original
> AST can call typecheckModule directly, but of course this requires using
> the GHC API directly. Moreover, even when using the GHC API directly anyway
> (as in my case), it means that tools cannot take advantage of ghc's
> infrastructure for dependency tracking, recompiling only changed modules,
> etc.
>
> Hence it would be useful to have "source plugins", which can be used both
> externally and when using ghc API (in the latter case I guess "hooks" would
> be the more appropriate terminology). Currently "core plugins" are recorded
> as part of DynFlags as
>
> pluginModNames :: [ModuleName],
> pluginModNameOpts :: [(ModuleName,String)],
>
> This makes sense when thinking of plugins only as an external mechanism,
> but is less convenient when using them as internal hooks, too. In my draft
> patch I introduce a new type "HscPlugin" (described shortly) and added
>
> sourcePlugins :: [HscPlugin],
>
> to DynFlags. HscPlugin is a record of a pair of functions; having the
> actual record here rather than a module name means that these functions
> can have a non-empty closure, which is obviously convenient when using this
> as a hook rather than an external plugin.
>
> In my current version HscPlugin looks like
>
> data HscPlugin = HscPlugin {
> runHscPlugin :: forall m. MonadIO m
> => DynFlags
> -> TcGblEnv
> -> m TcGblEnv
>
> , runHscQQ :: forall m. MonadIO m
> => Env TcGblEnv TcLclEnv
> -> HsQuasiQuote Name
> -> m (HsQuasiQuote Name)
> }
>
> runHscPlugin is the main function; it gets passed the TcGblEnv (which
> contains the type checked AST as its tcd_binds field).
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/ghc-devs/attachments/20130605/8aa5fb25/attachment.htm>
More information about the ghc-devs
mailing list