[Haskell-cafe] Configuration Problem and Plugins

M. George Hansen technopolitica at gmail.com
Sat Sep 3 12:15:37 CEST 2011


Greetings,

I'm a Python programmer who is relatively new to Haskell, so go easy on me :)

I have a program that uses (or will use) plugins to render output to
the user in a generic way. I'm basing the design of the plugin
infrastructure on the Plugins library, and have the following
interface:

data Renderer = Renderer {
    initialize :: IO (),
    destroy :: IO (),
    render :: SystemOutput -> IO ()
}

The program loads plugins at the start and runs the initialize
function, and then enters the main loop where it repeatedly calls the
render function with output to display. When the program exits the
main loop, it calls the destroy function to clean up any resources
used by the plugin. You can probably already see my problem: how do I
pass initialization information created in the initialize function to
the render function?

I'm vaguely aware of some solutions to the typical "configuration
problem", such as implicit arguments or explicitly passing the
configuration data through the function call hierarchy. As far as I
can tell, neither of these approaches would work because the program
can't know at compile time what, if any, configuration data is used by
the plugin.

I suppose I could pass a Dynamic up the call chain and let the plugin
decode it in the render function, but that seems a little kludgy to
me.

Any thoughts would be greatly appreciated.

--
  M. George Hansen



More information about the Haskell-Cafe mailing list