当提供多个互斥选项时,如何使用 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,你可以在那个时候发出你自己制作的错误消息。