2008/9/19 Magnus Therning <[EMAIL PROTECTED]>:
>
> First I thought I'd treat the configuration in a similar way, but then I
> noticed a slight ordering problem. The command line arguments should
> take priority over the contents of the configuration file, but the
> location of the configuration can be given as an argument. I could read
> the arguments twice, first to get the correct location of the config
> file, then load the config, and then read the arguments again to make
> sure they take priority. But that feels a little silly. Are there any
> more elegant solutions people are using?
I'm not sure how well it would hold up under maintenance, but you coud
have a config sum-type which is itself a monoid, and then create two
of them:
> data UserConfig = UserConfig
> { item1 :: Maybe Type1
> , item2 :: Maybe Type2
> , configFileLocation :: Maybe FilePath
> }
> instance Monoid UserConfig where
> {- not shown -}
> buildConfig :: IO UserConfig
> buildConfig = do
> cmdLineCfg <- buildConfigFromCmdLine
> fileCfg <- maybe (return mempty) buildConfigFromFile (configFileLocation
> cmdLineCfg)
>
> return $ fileCfg `mappend` cmdLineCfg
> -- mappend is assumed to be left-biased
> buildConfigFromCmdLine :: IO UserConfig
> buildConfigFromFile :: FilePath -> IO UserConfig
Does that make sense? or is it too complicated?
-Antoine
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe