Haskell中支持共享参数的命令行参数解析
我们目前正在使用Haskell中支持共享参数的命令行参数解析,haskell,command-line,Haskell,Command Line,我们目前正在使用System.Console.CmdArgs解析命令行参数。然而,我们对目前的做法并不完全满意。子命令之间有许多共享选项——例如用户名、开始日期和结束日期等 是否有支持“继承”的Haskell命令行解析库,或者可以获取子命令项函数列表并自动派生解析器?我们的目标是避免锅炉板,我们现在有很多 我们的子命令的一些示例: sum-payments [--start] [--end] [user] list-users-seen [--start] [--end] sum-queries
System.Console.CmdArgs
解析命令行参数。然而,我们对目前的做法并不完全满意。子命令之间有许多共享选项——例如用户名、开始日期和结束日期等
是否有支持“继承”的Haskell命令行解析库,或者可以获取子命令项函数列表并自动派生解析器?我们的目标是避免锅炉板,我们现在有很多
我们的子命令的一些示例:
sum-payments [--start] [--end] [user]
list-users-seen [--start] [--end]
sum-queries [--start] [--end]
所有子命令都支持
start
和end
选项,默认值始终为“开始时间”和“到现在”。每个子命令都可能有自己的选项或位置参数。下面是一个简单的示例,说明如何使用optpass applicative
注意startEnd
解析器是如何在listUsers
解析器中使用的。startEnd
解析器可用于任何其他需要开始和结束选项的解析器
import Options.Applicative
data StartEnd = StartEnd String String
deriving (Show)
data ListUsers = ListUsers { user :: String, bounds :: StartEnd }
deriving (Show)
startEnd :: Parser StartEnd
startEnd = StartEnd
<$> strOption ( long "start" )
<*> strOption ( long "end" )
listUsers :: Parser ListUsers
listUsers = ListUsers <$> strOption ( long "user") <*> startEnd
doListUsers :: ListUsers -> IO ()
doListUsers lusers = print lusers
main :: IO ()
main = execParser opts >>= doListUsers
where
opts = info (helper <*> listUsers)
( fullDesc
<> progDesc "Print a greeting for TARGET"
<> header "hello - a test for optparse-applicative" )
导入选项。应用程序
数据StartEnd=StartEnd字符串
派生(显示)
数据ListUsers=ListUsers{user::String,bounds::StartEnd}
派生(显示)
startEnd::解析器startEnd
startEnd=startEnd
选择(长“开始”)
选择(长“结束”)
listUsers::解析器listUsers
listUsers=listUsers选项(长“用户”)startEnd
doListUsers::ListUsers->IO()
doListUsers lusers=打印lusers
main::IO()
main=execParser opts>>=doListUsers
哪里
opts=info(帮助列表用户)
(全文)
progDesc“为目标打印问候语”
标题“hello-optparse应用程序的测试”)
下面是一个简单的示例,说明如何使用optpass应用程序
注意startEnd
解析器是如何在listUsers
解析器中使用的。startEnd
解析器可用于任何其他需要开始和结束选项的解析器
import Options.Applicative
data StartEnd = StartEnd String String
deriving (Show)
data ListUsers = ListUsers { user :: String, bounds :: StartEnd }
deriving (Show)
startEnd :: Parser StartEnd
startEnd = StartEnd
<$> strOption ( long "start" )
<*> strOption ( long "end" )
listUsers :: Parser ListUsers
listUsers = ListUsers <$> strOption ( long "user") <*> startEnd
doListUsers :: ListUsers -> IO ()
doListUsers lusers = print lusers
main :: IO ()
main = execParser opts >>= doListUsers
where
opts = info (helper <*> listUsers)
( fullDesc
<> progDesc "Print a greeting for TARGET"
<> header "hello - a test for optparse-applicative" )
导入选项。应用程序
数据StartEnd=StartEnd字符串
派生(显示)
数据ListUsers=ListUsers{user::String,bounds::StartEnd}
派生(显示)
startEnd::解析器startEnd
startEnd=startEnd
选择(长“开始”)
选择(长“结束”)
listUsers::解析器listUsers
listUsers=listUsers选项(长“用户”)startEnd
doListUsers::ListUsers->IO()
doListUsers lusers=打印lusers
main::IO()
main=execParser opts>>=doListUsers
哪里
opts=info(帮助列表用户)
(全文)
progDesc“为目标打印问候语”
标题“hello-optparse应用程序的测试”)
下面是一个示例,说明您试图解析的命令可能会很有用。因此,这里不是请求库建议的地方……因此,您可以描述问题、当前解决方案和面临的困难,如果这是一个合适的解决方案,有人可以建议使用不同的库。这里有一个说明性的示例,说明您试图解析的命令。因此,这里不是请求库建议的地方……因此,您可以描述问题、您当前的解决方案和您面临的障碍,如果这是一个合适的解决方案,有人可以建议使用不同的库。