Safe Haskell | Safe |
---|---|
Language | Haskell2010 |
Read a serialized (as in the Read typeclass) config data structure from a string
This is handy for the case where you need a strongly-typed, possibly hierarchical configuration. It's not a revolutionary idea to use Read deserialization of a text file but I found it useful to support comments and also wrapping possible failure in Either.
Example:
import TCE.Data.ReadConf ( readConfig ) -- Write your own custom data structure for config, like this: data Config = Config { foo :: String , bar :: Int , baz :: [String] , qux :: Bool } deriving Read -- Make it an instance of Read main = do -- Parse a String containing a single instance of the above data type econf <- readConfig <$> readFile "read-example.conf" -- The result is an Either String Config either print -- Failure is reported as a Left (\c -> (print $ bar c) >> (print $ qux c)) econf
And then file.conf could contain this Haskell source code:
-- An example config file Config { foo = "some data" --, bar = 0 , bar = 42 , baz = [ "dogs" , "cats" ] , qux = True }
- readConfig :: Read r => String -> Either String r