| Safe Haskell | Safe |
|---|---|
| Language | Haskell2010 |
TCE.Data.ReadConf
Description
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))
econfAnd 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