criterion-1.1.1.0: app/Options.hs
{-# LANGUAGE DeriveDataTypeable, DeriveGeneric, RecordWildCards #-}
module Options
(
CommandLine(..)
, commandLine
, parseCommandLine
, versionInfo
) where
import Data.Version (showVersion)
import Data.Data (Data, Typeable)
import GHC.Generics (Generic)
import Paths_criterion (version)
import Options.Applicative
data CommandLine = Analyse [FilePath]
| Version
deriving (Eq, Read, Show, Typeable, Data, Generic)
analyseOptions :: Parser CommandLine
analyseOptions = Analyse <$> some (argument str (metavar "FILE [...]"))
parseCommand :: Parser CommandLine
parseCommand =
(Version <$ switch (long "version" <> help "Show version info")) <|>
(subparser $
command "analyse" (info analyseOptions (progDesc "Analyse measurements")))
commandLine :: ParserInfo CommandLine
commandLine = info (helper <*> parseCommand) $
header versionInfo <>
fullDesc
parseCommandLine :: IO CommandLine
parseCommandLine = execParser commandLine
versionInfo :: String
versionInfo = "criterion " ++ showVersion version