Haskell optpass applicative:使用来自选项定义的自定义错误消息生成使用信息
我正在使用存储命令行参数的构造函数Haskell optpass applicative:使用来自选项定义的自定义错误消息生成使用信息,haskell,command-line-arguments,Haskell,Command Line Arguments,我正在使用存储命令行参数的构造函数SrvOpts填充Opts类型: main :: IO () main = join $ customExecParser cf $ info options (fullDesc <> header "header" <> footer "footer") where cf = defaultPrefs { prefShowHelpOnError=True } options :: Parser (IO (
SrvOpts
填充Opts
类型:
main :: IO ()
main = join $ customExecParser cf $ info options
(fullDesc <> header "header" <> footer "footer")
where cf = defaultPrefs { prefShowHelpOnError=True }
options :: Parser (IO ())
options = subparser $
command "serve" (info (handleServe <$> (SrvOpts
<$> strOption [...]
main::IO()
main=join$customExecParser cf$info选项
(fullDesc页眉“页眉”页脚“页脚”)
其中cf=defaultPrefs{prefShowHelpOnError=True}
选项::解析器(IO())
选项=subparser$
命令“发球”(信息(手发球)(SrvOpts
选择[…]
函数handleServe
获取数据,然后进行进一步验证
如何使用自定义错误消息和从
options
内部handleServe
生成的正常optpass应用程序样式使用信息来终止程序?可以使用options.applicative.Extra
中的parserFailure
功能来完成:
renderError :: Context -> String -> IO ()
renderError c msg = handleParseResult . Failure $
parserFailure argPrefs argInfo (ErrorMsg msg) [c]
在当前版本0.12.0.1中,必须从
Options.Applicative.Internal
导入Context
,这将发生变化。Context
构造函数使用子parser和ParserInfo
(handleServe…部分)用于呈现使用情况信息。是否始终要终止程序?或者,如果用户使用了错误的参数或-h
,是否只想显示使用情况/帮助信息?解析后,我将检查给定字符串的格式是否正确,并希望根据选项
如果不是。参数处理/解析工作正常。如果要单独检查字符串的格式,可以通过定义自己的字符串并将其与选项
一起使用来实现这一点(而不是使用选项
)@ben james:好的,但是如果我有更复杂的检查,这些检查依赖于尚未解析的其他值,那该怎么办?难道没有办法从应用程序的选项定义之外呈现从选项生成的“标准错误+使用信息”吗?