问题标签 [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 投票
1 回答
219 浏览

haskell - 在 optparse-applicative ReadM 中处理来自 openFile 的异常

使用 optparse-applicative,我想要一个可选参数,它应该是文件的路径,或者如果没有指定,则为stdin. 这里明显的选择是使这个参数类型IO Handle和当一个参数被传递时使用openFile。这是我目前拥有的:

这样做的问题是,我们没有正确地处理handle异常openFile,而是依赖于未处理异常的默认行为(打印错误并退出)。这看起来很恶心。

我认为更合适的方法是LeftopenFile. 问题是,eitherReader期望 aString -> Either String a所以我们不能做这样的事情:

当然,你可以从类型中tryOpenFile看出 this 不会进行类型检查。我不确定我所要求的是否可行,因为似乎错误消息必须是IO String,因为要获得错误,必须执行 IO 计算。所以至少看起来你需要eitherReader采取 aString -> IO (Either String a)或 a String -> Either (IO String) (IO Handle)。根据我对它们的基本理解,听起来可以在这里使用 monad 转换器来包装 ReadM(或相反?)。但这比我的理解要深一些,我不知道如何先行。

有没有办法在handleoptparse IOException-applicative 中完成ReadM

0 投票
1 回答
370 浏览

haskell - 使用 optparse-applicative 解析“枚举”选项

我如何为此示例实现解析器grep --help

假设我有

如何编写解析器?option auto似乎是一个杂项,因为Read应该是 的“逆” Show,我想保留派生的instance Show BinaryFiles.

0 投票
1 回答
211 浏览

haskell - 如何通过 Haskell 的 optparse-applicative 使用具有多个值的选项

我有以下使用 optparse-applicative 的 Haskell 代码,它在运行时挂起。

问题与许多组合器的使用有关,因为一旦我删除它,代码运行良好。

这是一个错误还是我做错了什么?

谢谢!

0 投票
1 回答
127 浏览

parsing - 错误:“变量不在范围内:(<>)”与库 optparse-applicative

我正在 SafariBookOnline 上观看 Richard Cook 制作的视频。他使用 Haskell 构建了一个命令行应用程序。在本视频中,他在编写解析命令行参数的程序时解释了一些基本概念。

我对 Haskell 很陌生,我不知道为什么这段代码不起作用:

这段代码不能很好地工作:

实际上,在我写“<>”的任何地方,编译器都会告诉我一个错误:

我遇到的问题很可能是由于 GHC 和 Optparse-applicative 的版本不同。我用的是最新的。LTS Haskell 9.12:0.13.2.0。

但由于我很新,我不知道如何重写理查德库克的代码。

我将不胜感激任何帮助。

提前致谢, 亚历克斯

0 投票
1 回答
90 浏览

haskell - 如何在 optparse-applicative 生成​​的帮助消息中为缺少的命令指定名称?

我正在尝试使用 Hackage 的optparse-applicative包,并且有一个关于如何指定在指定命令不足的情况下运行程序时显示的帮助消息的某个方面的问题。

以下示例程序说明了我的问题。从命令行运行时,它将两个命令之一作为输入。也就是说,它旨在作为$ program com1或运行$ program com2

当该程序运行时既没有命令com1也没有com2指定,将显示帮助消息。

此帮助消息显示(COMMAND | COMMAND)而不是(com1 | com2),我认为在此帮助消息中指定名称会更清晰、更有用。

指定--help选项如 in$ program --help给出不同的输出。

命令名称com1com2列在“可用命令”部分中。然而,在这里,我认为使用部分会更清晰,(com1 | com2)而不是(COMMAND | COMMAND).

如何指定帮助消息的使用部分(com1 | com2)而不是(COMMAND | COMMAND)

0 投票
1 回答
76 浏览

shell - 如何更改运行我的可执行文件的父工作目录?

我的项目是 Haskell 中的一个命令行应用程序,并使用opt-parse应用程序包来处理命令行选项的解析。

我正在尝试实现一种功能,该功能可以更改运行命令的 shell 的工作目录。

例如,我想做类似的事情

并将 shell 更改为我的程序与传递的选项关联的指定目录foo

我尝试使用包中的setCurrentDirectory函数来实现此功能directory,但这似乎不会影响运行该目录的 shell 中的工作目录;工作目录没有变化。我想象它正在设置某种程序内部工作目录,因为我看到运行可执行文件的 shell 没有任何变化。

是否可以让我的程序以这种方式更改目录?这种目录切换功能将提高使用我的应用程序的便利性。

如何从命令行可执行文件实现目录切换功能?

0 投票
1 回答
285 浏览

validation - 处理 CLI 参数语义错误的编程模式或库(即惯用方式)?

我有一个使用optparse-applicative库进行 CLI 参数解析的 Haskell 应用程序。我的 CLI 参数数据类型包含FilePaths(文件和目录),Doubles 等optparse-applicative可以处理解析错误,但我想确保某些文件和某些目录存在(或不存在),数字是>= 0等等。

可以做的是实现一堆帮助函数,比如这些:

然后我像这样使用它:

这对我来说看起来太临时和丑陋了。此外,我编写的几乎每个应用程序都需要类似的功能。当我想在实际使用数据类型做某事之前做一堆检查时,是否有一些惯用的方法来处理这种编程模式?涉及的样板越少越好:)

0 投票
1 回答
44 浏览

haskell - 使用 optparse-applicative 的程序的(键入)参数列表

有没有办法从命令行程序中提取名称和类型列表,使用optparse-applicative?

我正在 +/- 寻找一些类型的功能ParserInfo a -> [(String,TypeRep)]

0 投票
1 回答
427 浏览

haskell - 如何使用“optparse-applicative”创建和区分全局选项?

在使用 创建的 Haskell 可执行文件中optparse-applicative,我希望在所有子命令中都可用--version的全局选项旁边有一个全局选项。--help但是,提供的示例(见下文)--version使用子命令向 CLI 添加选项会导致--version选项不一致

并且永远不会出现在子命令的帮助中

我想要的行为是--version全局可用并适用于所有子命令:

从文档中不清楚如何实现这一点。

事实上,理想情况下,我希望能够在帮助输出中清楚地对选项进行分组:

有没有办法实现这一点optparse-applicative


0 投票
1 回答
88 浏览

haskell - 使用 optparse-applicative 生成​​命令行字符串

给定 aParser a和 type 的值a是否可以生成相关的命令行(以文本格式)?(基本上,与optparse-applicative通常使用的完全相反!)

例如,给定类似...

...如何转换以下内容...

...至...