当提供多个互斥选项时,如何使用 optparse-applicative 提供特定的错误消息?
How do you provide a specific error message with optparse-applicative when multiple mutually exclusive options are provided?
很容易指定与optparse-applicative互斥的选项:
data Exclusive = E1 | E2
exclusiveParser :: Parser ExclusiveOption
exclusiveParser =
(flag' E1 (short 'e1')
<|> (flag' E2 (short 'e2')
上面的解析器将解析 -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'))
然后在你的顶级处理程序中(即一旦所有选项都被解析),如果你看到 Both
,你可以在那个时候发出你自己制作的错误消息。
很容易指定与optparse-applicative互斥的选项:
data Exclusive = E1 | E2
exclusiveParser :: Parser ExclusiveOption
exclusiveParser =
(flag' E1 (short 'e1')
<|> (flag' E2 (short 'e2')
上面的解析器将解析 -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'))
然后在你的顶级处理程序中(即一旦所有选项都被解析),如果你看到 Both
,你可以在那个时候发出你自己制作的错误消息。