vcs-ignore-0.1.0.0: app/Main/Options.hs
{-# LANGUAGE StrictData #-}
-- |
-- Module : Main.Options
-- Description : Options definitions for "optparse-applicative"
-- Copyright : (c) 2020-2026 Vaclav Svejcar
-- License : BSD-3-Clause
-- Maintainer : vaclav.svejcar@gmail.com
-- Stability : experimental
-- Portability : POSIX
--
-- Options definitions for "optparse-applicative".
module Main.Options (
Options (..),
Mode (..),
optionsParser,
) where
import Main.Vendor (
buildVersion,
productDesc,
productInfo,
)
import Options.Applicative
data Options = Options
{ oMode :: Mode
, oDebug :: Bool
}
deriving (Eq, Show)
data Mode = Path FilePath
deriving (Eq, Show)
optionsParser :: ParserInfo Options
optionsParser =
info
(options <**> versionP <**> helper)
(fullDesc <> progDesc productDesc <> header productInfo)
where
options =
Options . Path
<$> strOption
( long "path"
<> short 'p'
<> metavar "PATH"
<> help
"path to check"
)
<*> switch (long "debug" <> help "produce more verbose output")
versionP :: Parser (a -> a)
versionP = versionInfoP <*> versionNumP
where
versionInfoP =
infoOption
productInfo
(long "version" <> short 'v' <> help "show version info")
versionNumP =
infoOption
buildVersion
(long "numeric-version" <> help "show only version number")