
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.
But the way Common calls the modules is like this (this is my original code
which ignores the need for configuration:
fnLookupTable :: [(String, String -> Int)]
fnLookupTable = [ ("a", moduleAFn)
,("b", moduleBFn) ]
commonFunction :: [String] -> [Int]
commonFunction ss = do
let lookupFn functionName = fromJust $ lookup functionName fnLookupTable
result = map (\s -> ((lookupFn s) "some input")) ss
return result
So if I were to pass some configuration to each module I would need to
change the type signature of fnLookupTable:
fnLookupTable :: [(String, ConfigurationData -> String -> Int)]
data ConfigurationData = TypeACons AData
| TypeBCons BData
| TypeCCons CData
What's annoying about this is the need to make this extra type
ConfigurationData and what's worse, I can't hide AData, BData, CData in the
modules A, B, C. This commonFunction has to "know" about them. If I modify
modules or add new modules there's an extra step, modifying
ConfigurationData.
On Tue, Jan 10, 2012 at 10:45 AM, Dennis Raddle
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'd like to load it at most once. In C, I would use a "static" variable in the module to store the data. How can I do this in Haskell?