Я пытаюсь создать простой файл конфигурации для чтения статических данных из файла.Я использовал примеры из ConfigFile-1.1.4 для чтения данных из файла, хотя я не понимал бит кода, у меня он работает.Но мне нужно пропустить этот файл конфигурации через мое приложение, и я понимаю, что мне нужно использовать монаду readerT для этого?
Рабочая часть моего кода для чтения из файла ниже
getConfig = do
config <- readConfig "config.cfg"
putStrLn $ "The path value is: " ++ (path config)
putStrLn $ "The filename value is: " ++ (fileName config)
readConfig :: String -> IO ConfigInfo
readConfig f = do
rv <-
runErrorT $
do
cp <- join $ liftIO $ readfile emptyCP f
let x = cp
-- read out the attributes
pv <- get x "DEFAULT" "path"
fv <- get x "DEFAULT" "filename"
-- build the config value
return (ConfigInfo {path = pv, fileName = fv})
either (\x -> error (snd x)) (\x -> return x) rv
У меня есть функция,
get :: ID -> Name -> IO Keys
get u n = do
p <- readFile ("getthisvaluefromconfigfile" ++ "getfromConfigfile")
.
.
.
return (p, b)
Из примеров, которые я читаю, я могучтобы понять, что функция ask вернула бы мне среду, а затем я могу использовать функции для ConfigInfo для извлечения значений.
a) Я просто не могу понять, как загрузить значения в среду вфункция getConfig?
b) И как мне указать в функции ask (Get), какой экземпляр ConfigInfo для чтения?
Я пытался исследовать, нашел несколько примеров, в которых используютсячитатель монада, но ни один из них не показывает, как загрузить env.