我正在尝试使用 Hackage 的optparse-applicative包,并且有一个关于如何指定在指定命令不足的情况下运行程序时显示的帮助消息的某个方面的问题。
以下示例程序说明了我的问题。从命令行运行时,它将两个命令之一作为输入。也就是说,它旨在作为$ program com1
或运行$ program com2
。
module Main where
import Options.Applicative
import Data.Semigroup ((<>))
data Command = Com1
| Com2
com1 :: Parser Command
com1 = subparser $ command "com1" $ info (pure Com1) fullDesc
com2 :: Parser Command
com2 = subparser $ command "com2" $ info (pure Com2) fullDesc
commandParser :: Parser Command
commandParser = com1
<|> com2
runCommand :: Command -> IO ()
runCommand Com1 = putStrLn ">>> Com1 <<<"
runCommand Com2 = putStrLn ">>> Com2 <<<"
opts :: ParserInfo Command
opts = info (commandParser <**> helper)
$ fullDesc
<> progDesc "=== progDesc ==="
<> header "=== header ==="
<> footer "=== footer ==="
main :: IO ()
main = runCommand =<< execParser opts
当该程序运行时既没有命令com1
也没有com2
指定,将显示帮助消息。
$ program
Missing: (COMMAND | COMMAND)
Usage: options-applicative-example-exe (COMMAND | COMMAND)
=== progDesc ===
此帮助消息显示(COMMAND | COMMAND)
而不是(com1 | com2)
,我认为在此帮助消息中指定名称会更清晰、更有用。
指定--help
选项如 in$ program --help
给出不同的输出。
$ program --help
=== header ===
Usage: options-applicative-example-exe (COMMAND | COMMAND)
=== progDesc ===
Available options:
-h,--help Show this help text
Available commands:
com1
com2
=== footer ===
命令名称com1
和com2
列在“可用命令”部分中。然而,在这里,我认为使用部分会更清晰,(com1 | com2)
而不是(COMMAND | COMMAND)
.
如何指定帮助消息的使用部分(com1 | com2)
而不是(COMMAND | COMMAND)
?