{-# LANGUAGE OverloadedStrings #-} module Main where import Data.Ini.Config import Data.Text (Text) import qualified Data.Text.IO as T data Config = Config { cfNetwork :: NetworkConfig, cfLocal :: Maybe LocalConfig } deriving (Eq, Show) data NetworkConfig = NetworkConfig { netHost :: String, netPort :: Int } deriving (Eq, Show) data LocalConfig = LocalConfig { localUser :: Text } deriving (Eq, Show) configParser :: IniParser Config configParser = do netCf <- section "NETWORK" $ do host <- fieldOf "host" string port <- fieldOf "port" number return NetworkConfig { netHost = host, netPort = port } locCf <- sectionMb "LOCAL" $ LocalConfig `fmap` field "user" return Config { cfNetwork = netCf, cfLocal = locCf } main :: IO () main = do rs <- T.getContents print (parseIniFile rs configParser)