[Haskell-cafe] Configuration Problem and Plugins

MigMit miguelimo38 at yandex.ru
Sat Sep 3 13:22:39 CEST 2011


data Renderer = Renderer {destroy :: IO (); render :: SystemOutput -> IO ()}
newtype Initializer = Initializer {initialize :: IO Renderer}

Отправлено с iPad

03.09.2011, в 14:15, "M. George Hansen" <technopolitica at gmail.com> написал(а):

> 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
> 
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe



More information about the Haskell-Cafe mailing list