像Google GFlags for Haskell这样的选项库

时间:2012-04-08 16:06:54

标签: haskell options getopt gflags

我有兴趣与Google的Haskell标志库非常相似。

以下是对gflags的小介绍,它说明了我喜欢它的原因:http://gflags.googlecode.com/svn/trunk/doc/gflags.html

我在Hackage上查看了各种类似getopt的库,我没有找到一个与gflags的简单性和灵活性相匹配的文件。

即,我想拥有这些功能:

  • 生成--help(使用帮助中提到的默认值),
  • 除了解析用户提供的选项之外,它还应该在不匹配的选项上出错,因此用户有机会记下拼写错误,
  • 标志可以在任何模块中轻松声明(希望在顶层,如果需要可以接受模板Haskell hackery),
  • 不需要在main中调用我声明标志的所有模块,而是标志以某种方式在启动/链接/随时注册自己,
  • 如果main必须调用一般的初始化函数,就像在gflags'
    google::ParseCommandLineFlags(&argc, &argv, true);
  • 中一样
  • 标志可以纯粹使用(是的,我认为这是unsafePerformIO的一个恰当用法,可以使API更简单。)

在环顾四周但没有成功之后,我自己也想到了这个想法(当然也是在Hackage上分享)。但是,我完全不知道注册部分的实现。我需要类似于GCC((构造函数))属性或C ++的静态初始化,但在Haskell中。标准的顶级unsafePerformIO是不够的,因为它是懒惰的,因此在main开始运行之前不会调用它。

2 个答案:

答案 0 :(得分:3)

在调查了Hackage上的所有解决方案后(感谢所有提示!),我继续了Don的类型类实现思路,并创建了一个名为HFlags的库。

关于hackage:http://hackage.haskell.org/package/hflags

我还有一篇博文,描述它:http://blog.risko.hu/2012/04/ann-hflags-0.html

答案 1 :(得分:2)

您可能会喜欢CmdArgs,但我还没有充分利用它来判断它是否满足您的所有约束条件。