[GHC] #8050: add a required wrapper around plugin installers

GHC ghc-devs at haskell.org
Wed Jul 10 19:41:10 CEST 2013


#8050: add a required wrapper around plugin installers
------------------------------------+-------------------------------------
       Reporter:  nfrisby           |             Owner:
           Type:  task              |            Status:  new
       Priority:  normal            |         Milestone:
      Component:  Compiler          |           Version:  7.6.3
       Keywords:                    |  Operating System:  Unknown/Multiple
   Architecture:  Unknown/Multiple  |   Type of failure:  None/Unknown
     Difficulty:  Unknown           |         Test Case:
     Blocked By:                    |          Blocking:
Related Tickets:                    |
------------------------------------+-------------------------------------
 While trying to expand
 [http://www.haskell.org/ghc/docs/7.6.1/html/users_guide/compiler-
 plugins.html#writing-compiler-plugins the CoreMonad.reinitializeGlobals
 mechanism], I proposed an alternative that SPJ noted could be more
 generally useful.

 The nub of the idea is to require plugins to apply a distinguished
 function to their installation function. Instead of defining the plugin as

 {{{
 module APlugin (plugin) where
 import GhcPlugins

 plugin :: Plugin
 plugin = defaultPlugin {installCoreToDos = install}

 install :: [CommandLineOption] -> [CoreToDo] -> CoreM [CoreToDo]
 install = …
 }}}

 plugins would be defined as

 {{{
 module APlugin (plugin) where
 import GhcPlugins

 plugin :: Plugin
 plugin = defaultPlugin {installCoreToDos = mkPluginInstaller install}

 install :: [CommandLineOption] -> [CoreToDo] -> CoreM [CoreToDo]
 install = install = …
 }}}

 The new function `mkPluginInstaller` provides a hook for GHC developers to
 process the plugin, hidden from the plugin author. For example, it could
 encapsulate the current `reinitializeGlobals` mechanism.

 I'm not sure if using an abstract type to enforce that this function is
 called is necessary, but it's an option.

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8050>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler



More information about the ghc-tickets mailing list