{-# LANGUAGE OverloadedStrings #-}
module Main where
import Control.Applicative ((<|>), optional)
import Data.Text (Text, pack)
import Flags.Applicative
import System.Environment (getArgs)
data Mode = Lenient | Strict deriving (Read, Show)
data Options = Options
{ rootPath :: Text
, logLevel :: Int
, mode :: Mode
, context :: Maybe (Text, [Double])
} deriving Show
optionsParser :: FlagParser Options
optionsParser = Options
<$> (textFlag "root" "path to the root" <|> ("HERE" <$ switch "default_root" ""))
<*> autoFlag "log_level" "log verbosity"
<*> (autoFlag "mode" "mode [Lenient|Strict]" <|> pure Strict)
<*> (optional $ (,) <$> textFlag "context" "" <*> (autoListFlag "," "values" "" <|> pure []))
main :: IO ()
main = parseSystemFlagsOrDie optionsParser >>= print