<span style="font-family:courier new,monospace">I should clarify. I have many modules A, B, C, D, .. which need to load configuration from disk--each module its own data type AData, BData, CData... . One solution is to load the data once at the highest common level (call it Common) and pass it to each module. <br>
<br>But the way Common calls the modules is like this (this is my original code which ignores the need for configuration:</span><br><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">fnLookupTable :: [(String, String -&gt; Int)]</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">fnLookupTable = [ (&quot;a&quot;, moduleAFn)</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">                 ,(&quot;b&quot;, moduleBFn) ]</span><br style="font-family:courier new,monospace">
<br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">commonFunction :: [String] -&gt; [Int]</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">commonFunction ss = do</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">   let lookupFn functionName = fromJust $ lookup functionName fnLookupTable</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">       result = map (\s -&gt; ((lookupFn s) &quot;some input&quot;)) ss</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">   return result</span><br style="font-family:courier new,monospace"><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">So if I were to pass some configuration to each module I would need to change the type signature of fnLookupTable:</span><br style="font-family:courier new,monospace">
<br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">fnLookupTable :: [(String, ConfigurationData -&gt; String -&gt; Int)]</span><br style="font-family:courier new,monospace"><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">data ConfigurationData = TypeACons AData</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">                       | TypeBCons BData</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">                       | TypeCCons CData<br><br>What&#39;s annoying about this is the need to make this extra type ConfigurationData and what&#39;s worse, I can&#39;t hide AData, BData, CData in the modules A, B, C. This commonFunction has to &quot;know&quot; about them. If I modify modules or add new modules there&#39;s an extra step, modifying ConfigurationData.<br style="font-family:courier new,monospace">
</span>        <br style="font-family:courier new,monospace"><br style="font-family:courier new,monospace"><br style="font-family:courier new,monospace"><div style="font-family:courier new,monospace" class="gmail_quote">On Tue, Jan 10, 2012 at 10:45 AM, Dennis Raddle <span dir="ltr">&lt;<a href="mailto:dennis.raddle@gmail.com">dennis.raddle@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I would like to know how to do something in Haskell. I have a module which needs to load some data from disk in order to run, and I&#39;d like to load it at most once. In C, I would use a &quot;static&quot; variable in the module to store the data. How can I do this in Haskell?<br>

</blockquote></div><br>