я определяю режим программы по количеству аргументов (без флагов / «подпарсер» и «команда»), но безуспешно.
сессия GCI
main% stack ghci optparse-applicative
Configuring GHCi with the following packages:
GHCi, version 7.10.2: http://www.haskell.org/ghc/ :? for help
λ: :load Main.hs
[1 of 1] Compiling Main ( Main.hs, interpreted )
Ok, modules loaded: Main.
λ: :main -v
v 0.0.1
λ: :main a
mode 1 with a: a
λ: :main a b
Usage: <interactive> (-v | a | a b)
*** Exception: ExitFailure 1
с :main a b я ожидал режим 2 с a: a и b: b в качестве результата.
что я пропустил? Благодарность!
Main.hs
module Main where
import Options.Applicative
data AppArgs = ShowVersion
| Mode1 {
a :: String
}
| Mode2 {
a :: String
, b :: String
}
main :: IO ()
main = execParser opts >>= run
where opts = info (helper <*> appArgs)
( fullDesc
<> header "example")
appArgs :: Parser AppArgs
appArgs = flag' ShowVersion (short 'v')
<|> Mode1 <$> strArgument (metavar "a")
<|> Mode2 <$> strArgument (metavar "a") <*> strArgument (metavar "b")
run :: AppArgs -> IO ()
run ShowVersion = putStrLn "v 0.0.1"
run (Mode1 a) = putStrLn $ "mode 1 with a: " ++ a
run (Mode2 a b) = putStrLn $ "mode 2 with a: " ++ a ++ " and b: " ++ b
Alternative
экземплярParser
не выполняет откат - person Michael Steele   schedule 16.12.2015