You could try something like fnLookupTable :: IO [(String, String -> Int)] fnLookupTable = do confA <- getConfigA confB <- getConfigB return [("a", moduleAFn confA) ("b", moduleBFn confB)] Now you pass the result of fnLookupTable around. HTH, -- Felipe.