将配置加载到数据类型并迭代类型字段以更改默认值

时间:2016-10-27 01:09:25

标签: haskell

我目前使用配置程序库将配置文件读入其数据类型:

import           Data.Configurator             (Worth (Required), getMap, load)
import           Data.Configurator.Types       (convert)
import qualified Data.HashMap.Strict           as H (empty, lookup)

loadConfig :: IO AppConfig
loadConfig = do
  conf <- load [Required "application.cfg"] >>= getMap
  let cfg def key =  fromMaybe def . maybe (Just def) convert $ H.lookup key conf
  return AppConfig { cfgDBHost     = cfg "localhost" "db-host"
                   , cfgDBName     = cfg "test" "db-name"
                   , cfgSesTime    = cfg 28800 "ses-time"
                   , cfgMailDir    = cfg "./mail" "mail-dir"
                   , cfgDistDir    = cfg "./public" "dist-dir"
                   , cfgIndexHtml  = cfg "index.html" "index-html"
                   , cfgUseTls     = cfg False "use-tls"
                   , cfgTlsPort    = cfg 8443 "tls-port"
                   , cfgTlsKey     = cfg "key.pem" "tls-key"
                   , cfgTlsCrt     = cfg "crt.pem" "tls-crt"
                   , cfgAppPort    = cfg 3000 "app-port"
                   , cfgLDAPHost   = cfg "" "ldap-host"
                   , cfgLDAPDomain = cfg "" "ldap-domain"
                   }

因此,如果存在文件解析错误或配置文件中不存在该设置,则会将默认设置分配给记录字段。

我的问题是这个。我想在最开始时使用默认值初始化AppConfig,然后迭代使用从文件加载的设置更改它们的字段。我想保留默认值,因为它是出现错误或文件中不存在设置。

我想问题是我可以迭代记录字段吗? 如果可能的话,上述问题的最佳解决方案是什么? 总结一下。我想用默认设置填充记录字段,读取配置文件,使用配置文件中的可用设置覆盖记录字段。

感谢。

0 个答案:

没有答案