Chr*_*wis 6 haskell command-line-arguments
使用optparse-applicative可以轻松指定互斥选项:
data Exclusive = E1 | E2
exclusiveParser :: Parser ExclusiveOption
exclusiveParser =
(flag' E1 (short 'e1')
<|> (flag' E2 (short 'e2')
Run Code Online (Sandbox Code Playgroud)
上面的解析器将解析-e1或者-e2,但不能解析两者.当提供-e1和-e2提供时,默认的optparse-applicative操作是打印应用程序的使用消息.我想提供一个特定的错误消息,告知他们不能同时提供用户-e1和-e2,但我没有看到一个明显的方式来做到这一点.
任何建议(或解决方案)将不胜感激?
我不熟悉 optparse-applicative,所以我不确定它提供了哪些错误打印功能。(有时解析器组合器库提供了一个原语来更改打印的错误,但我在快速浏览 optparse-applicative 文档时没有看到任何内容。我完全有可能错过了它。)
但如果库本身没有任何可用的内容,您始终可以通过接受这两个标志来打印自己的消息;例如
data Exclusive = E1 | E2 | Both
exclusiveParser
= (flag' E1 (short 'e'))
<|> (flag' E2 (short 'f'))
<|> (flag' Both (short 'e') <* flag' Both (short 'f'))
Run Code Online (Sandbox Code Playgroud)
然后在您的顶级处理程序中(即一旦所有选项都被解析),如果您看到Both,您可以在此时发出您自己制作的错误消息。