问题标签 [optparse-applicative]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
47 浏览

haskell - 如何在 optparse-applicative 中重写 --help 标志输出

我正在尝试重写 optparse-applicative 自动生成的帮助输出。以下代码让我替换帮助输出:

(可以用 执行stack script --resolver=lts-16 main.hs -- --help

但是,我不想完全替换它,而只是替换自动生成的帮助文本的某些部分。这怎么可能?

0 投票
1 回答
231 浏览

haskell - 如何在 Options.Applicative 中为互斥标志编码

我是 Haskell 新手。作为一项学习练习,我正在尝试将我的一个 Rust 程序移植到 Haskell。在 Rust 中,我使用了令人惊叹的clap包,并且被Options.Applicative认为是一个好看的替代品。这是一个例子:

走到这一步,我撞到了一堵砖墙。我需要使“tod”和“pmc”标志互斥。包 README 中有一个使用 <|> 的示例,但它不适用于布尔标志,我不知道如何转换它。

有人可以帮忙吗?

0 投票
1 回答
111 浏览

haskell - Optparse-applicative:连续解析(ReadM)

我有一个带有add两种参数的基本命令:一个单词或一个标签。标签只是一个以 . 开头的单词+。一个词只是一个String。它可以包含至少一个参数(我some用于此)。

我想添加另一条规则:该add命令应至少接收一个单词(但 0 个或多个标签)。为此,我需要在第一次解析单词列表后进行检查。如果它是空的,我想失败,就好像add命令没有收到参数一样,但我不知道该怎么做。

0 投票
0 回答
36 浏览

haskell - 有没有办法在 IO monad 之外获取 optparse-aplicative 解析器的使用块

optparse-applicativepackage 提供了非常强大的命令行参数解析工具。其中包括自动使用文本生成,它在解析错误的情况下打印,或者--help如果解析器被execParserIO monad 内部的函数使用,则由选项打印。

如果使用,有什么方法可以获取使用文本execParserPure

0 投票
1 回答
75 浏览

haskell - 如何防止递归定义的 optparse-applicative 解析器挂起?

假设我有以下递归定义的 ADT

我可以递归地为这个结构定义一个解析器(使用optparse-applicative,导入为OA),如下所示:

这让我可以传递参数,例如

  • --colour得到一个值Colour
  • --nested --colour得到一个值Nested Colour
  • --nested --colour得到一个值Nested (Nested Colour)
  • 等等

不幸的是,如果我尝试为解析器生成帮助文本,它会失败。这在一定程度上是有道理的,因为解析器的“结构”是无限大的。但是,我很乐观地认为可能会有某种解决方法,例如转换内部typeParser,这样我们就不会尝试为它生成帮助文本。

可以对该 Parser 进行的最小修改以使其保留工作帮助文本?


除了无法生成帮助文本之外,如果我想将解析器修改为以下内容(添加默认值,但也允许--nested自己解析为Nested Character),这也会挂起,而不是达到默认值:


通过将解析器更改为以下内容,我已经能够解决该问题

要在此解析器中指定 的值Nested (Nested Colour),您需要传递--nest 2 --colour. 这可行,但并不理想,因为我真的很喜欢“多--nesting参数”命令风格。

0 投票
1 回答
45 浏览

haskell - 执行包含多个选项的检查

我有

我想添加一张支票,第一个月不在第二个月之后。显然我不能在OP.ReadM. 我可以办理登机手续OP.Parser吗?或者我是否必须在解析后执行检查parserFailureOptparse-applicative: Continuous parsing (ReadM)

0 投票
1 回答
46 浏览

haskell - optparse-applicative 的(子)命令同义词

我想在我的 Haskell 命令行工具中添加子命令的同义词。例如summarise,并且summarize应该产生相同的结果。当然,我可以只添加一个完全独立的命令summarize,它作为自己的元素出现在--help. 但也许有更优雅的方式。

这是堆栈脚本中的一个独立示例opt_ex.hs

您可以使用./opt_ex.hs greet Johnto getHello, John!和 with ./opt_ex.hs groot Johnto get运行它Howdy, John!。运行./opt_ex.hs将为您提供以下概述:

什么是最优雅的方式,gruut在这个例子中添加一个命令,它的行为与 完全一样greet,但在代码和用户中产生最少的开销?

理想情况下,我想./opt_ex.hs产生这样的东西: