packages feed

evoke-0.2021.8.25: src/lib/Evoke/Type/Config.hs

module Evoke.Type.Config
  ( Config(..)
  , fromFlags
  ) where

import qualified Data.List as List
import qualified Evoke.Type.Flag as Flag

data Config = Config
  { help :: Bool
  , verbose :: Bool
  , version :: Bool
  }
  deriving (Eq, Show)

initial :: Config
initial = Config { help = False, verbose = False, version = False }

fromFlags :: Foldable t => t Flag.Flag -> Config
fromFlags = List.foldl' applyFlag initial

applyFlag :: Config -> Flag.Flag -> Config
applyFlag config flag = case flag of
  Flag.Help -> config { help = True }
  Flag.Verbose -> config { verbose = True }
  Flag.Version -> config { version = True }