packages feed

flags-applicative-0.0.4.0: app/SimpleExample.hs

{-# 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