Haskell 当提供了多个互斥选项时,如何使用optparse Application提供特定的错误消息?

Haskell 当提供了多个互斥选项时,如何使用optparse Application提供特定的错误消息?,haskell,command-line-arguments,Haskell,Command Line Arguments,使用以下选项可以轻松指定互斥选项: data Exclusive=E1 | E2 exclusiveParser::解析器ExclusiveOption 独家经销商= (标志“E1”(简称“E1”) (标记“E2”(简称“E2”) 上面的解析器将解析-e1或-e2,但不能同时解析两者。同时提供-e1和-e2时,默认的optparse应用程序操作是打印应用程序的使用消息。我想向用户提供一条特定的错误消息,通知他们无法同时提供>-e1和-e2,但我看不出一个明显的方法来做到这一点 如果您有任何建议

使用以下选项可以轻松指定互斥选项:

data Exclusive=E1 | E2
exclusiveParser::解析器ExclusiveOption
独家经销商=
(标志“E1”(简称“E1”)
(标记“E2”(简称“E2”)
上面的解析器将解析
-e1
-e2
,但不能同时解析两者。同时提供
-e1
-e2
时,默认的optparse应用程序操作是打印应用程序的使用消息。我想向用户提供一条特定的错误消息,通知他们无法同时提供
>-e1
-e2
,但我看不出一个明显的方法来做到这一点


如果您有任何建议(或解决方案),我将不胜感激。

我不熟悉optparse应用程序,因此我不确定它提供了什么错误打印功能。(有时parser combinator库提供一个原语来更改打印的错误,但我在快速浏览optparse应用程序文档时没有看到任何相关内容。完全可能是我错过了它。)

但是,如果库本身没有任何可用信息,您可以通过接受两个标志来打印自己的消息;例如

data Exclusive = E1 | E2 | Both
exclusiveParser
     =  (flag' E1 (short 'e'))
    <|> (flag' E2 (short 'f'))
    <|> (flag' Both (short 'e') <* flag' Both (short 'f'))
data Exclusive=E1 | E2 |两者
独家经销商
=(标志“E1”(短“e”))
(标记“E2”(短“f”))

(标记“两者”(短“e”)@ChristopherLewis噢,当然可以;如果您愿意,您可以使用
data Exclusive=E1 | E2
并返回一个
可能是Exclusive
,除了commandlineparsingeror Exclusive
或其他什么,这可能是一个更简洁的设计——特别是如果这意味着您可以编写解析器和错误报告应用程序的话。[删除了以前的评论:过早按enter键,但其内容基本上包含在此评论中。]我将此标记为正确答案:经过仔细检查,我找不到更好的方法来处理这种情况。但是,将失败指示器编码为sum类型确实会让我感到不舒服。我应该指出,OptPass Applicationve的错误消息已得到改进(添加)因为我最初提出了这个问题。从版本0.14开始,问题中的解析器将输出错误
无效选项“%e2”
。我在版本1.2.1中使用解决方案。错误无效选项“%e2”在解析命令行选项之前抛出。因此,我无法同时检查这两个选项。如何同时获取这两个选项?
data Exclusive = E1 | E2 | Both
exclusiveParser
     =  (flag' E1 (short 'e'))
    <|> (flag' E2 (short 'f'))
    <|> (flag' Both (short 'e') <* flag' Both (short 'f'))