读取monad库的命令行参数

Nik*_*kov 7 haskell command-line-arguments

我找了一种通过命令行参数解析和帮助代做文章使用单子抽象库.我有以下相当明显的使用模式:

main = do
  portOrSocket <- Args.run $ do
    mbSocket <- Args.read $ Args.Arg "s" "socket" "Description"
    mbPort <- Args.read $ Args.Arg "p" "port" "Description"
    case mbSocket of
      Just socket -> return $ Right socket
      Nothing -> case mbPort of
        Just port -> return $ Left port
        Nothing -> return $ Left defaultPort
  ...
Run Code Online (Sandbox Code Playgroud)

上面的代码必须处理分析,验证和使用产生所需的所有信息和国际海事组织是很容易理解.认真细致地翻着hackage,检查出像cmdargs,cmdlib,parseargs,ReadArgs包后不幸的是我没有发现任何东西任何地方接近这个.但在深入实施之前,我想确保我没有错过任何东西.那么是否有一个利用类似方法解决问题的库?

Gab*_*lez 8

你可以用optparse-applicative.最常见的使用模式看起来像这样(我只是从我使用的小实用程序进行复制和粘贴):

options :: Parser (String, String)
options = (,)
    <$> (strOption $ mconcat [
        short 'n',
        long "node",
        metavar "NODE",
        value "127.0.0.1",
        showDefaultWith id,
        completer (bashCompleter "hostname"),
        help "AMQP node to connect to" ] )
    <*> (strOption $ mconcat [
        short 'q',
        long "queue",
        metavar "QUEUE",
        value "1.0.0",
        showDefaultWith id,
        help "Queue to initialize" ] )

main = do
    (hostName, queue) <-
        execParser $ info (helper <*> options) $ mconcat [
            fullDesc,
            header "The Suns setup utility",
            progDesc "Sets up an AMQP node",
            footer "Report bugs to Gabriel439@gmail.com" ]
    ...
Run Code Online (Sandbox Code Playgroud)

当我运行编译的程序时-h,我得到:

$ suns-admin -h
The Suns setup utility

Usage: suns-admin [-n|--node NODE] [-q|--queue QUEUE]
  Sets up an AMQP node

Available options:
  -h,--help                Show this help text
  -n,--node NODE           AMQP node to connect to (default: 127.0.0.1)
  -q,--queue QUEUE         Queue to initialize (default: 1.0.0)

Report bugs to Gabriel439@gmail.com
Run Code Online (Sandbox Code Playgroud)

这让你了解一些可以使用的漂亮选项以及程序生成的好输出.