packages feed

lambda-calculator-3.0.0: app/CliOptions.hs

module CliOptions
  ( CliOptions(..),
    Language(..),
    parseCliOptions
  ) where

import RIO

import Options.Applicative hiding (command, ParseError())

data CliOptions = CliOptions {
  language :: Language,
  version :: Bool
}

-- | Supported Languages:
-- 
--    * Untyped Lambda Calculus
--    * System F
data Language 
  = Untyped
  | SystemF

parseCliOptions :: IO CliOptions
parseCliOptions = execParser opts
  where opts = info
          (helper <*> cliParser)
          (briefDesc <> progDesc "A Lambda Calculus Interpreter")

cliParser :: Parser CliOptions
cliParser = CliOptions 
  <$> flag Untyped SystemF language
  <*> switch version
  where language = long "system-f"
          <> short 'f'
          <> internal -- this is a secret feature
          <> help "Use the System F interpreter"

        version = long "version"
          <> short 'v'
          <> help "Print the version"