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"