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包后不幸的是我没有发现任何东西任何地方接近这个.但在深入实施之前,我想确保我没有错过任何东西.那么是否有一个利用类似方法解决问题的库?
你可以用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)
这让你了解一些可以使用的漂亮选项以及程序生成的好输出.