45 lines
902 B
Haskell
45 lines
902 B
Haskell
|
module Language.Elna.CommandLine
|
||
|
( CommandLine(..)
|
||
|
, commandLine
|
||
|
, execParser
|
||
|
) where
|
||
|
|
||
|
import Options.Applicative
|
||
|
( Parser
|
||
|
, ParserInfo(..)
|
||
|
, argument
|
||
|
, execParser
|
||
|
, fullDesc
|
||
|
, help
|
||
|
, helper
|
||
|
, info
|
||
|
, long
|
||
|
, metavar
|
||
|
, optional
|
||
|
, progDesc
|
||
|
, short
|
||
|
, str
|
||
|
, strOption
|
||
|
)
|
||
|
import Control.Applicative ((<**>))
|
||
|
|
||
|
data CommandLine = CommandLine
|
||
|
{ input :: FilePath
|
||
|
, output :: Maybe FilePath
|
||
|
} deriving (Eq, Show)
|
||
|
|
||
|
parser :: Parser CommandLine
|
||
|
parser = CommandLine
|
||
|
<$> argument str inFile
|
||
|
<*> optional (strOption outFile)
|
||
|
where
|
||
|
inFile = metavar "INFILE" <> help "Input file."
|
||
|
outFile = long "output"
|
||
|
<> short 'o'
|
||
|
<> metavar "OUTFILE"
|
||
|
<> help "Output file."
|
||
|
|
||
|
commandLine :: ParserInfo CommandLine
|
||
|
commandLine = info (parser <**> helper)
|
||
|
$ fullDesc <> progDesc "Elna compiler."
|