packages feed

herms-1.8.2.1: src/ReadConfig.hs

module ReadConfig where

import UnitConversions
import qualified Text.Read as TR
import Control.Exception
import Data.Typeable
import Data.List.Split
import Paths_herms

data Config = Config
  { defaultUnit        :: Conversion
  , defaultServingSize :: Int
  , recipesFile        :: String
  } deriving (Read, Show)

data ConfigParseError = ConfigParseError 
  deriving Typeable

instance Show ConfigParseError where
  show ConfigParseError = "Error parsing config.hs"

instance Exception ConfigParseError

dropComments :: String -> String
dropComments = unlines . map (head . (splitOn "--")) . lines

getConfig :: IO Config
getConfig = do
  fileName <- getDataFileName "config.hs"
  contents <- readFile fileName
  let result = TR.readEither (dropComments contents) :: Either String Config
  case result of
    Left str -> throw ConfigParseError
    Right r  -> return r