4

Google の Haskell 用フラグ ライブラリに非常に似たものを用意することに興味があります。

以下は、私が gflags を気に入っている理由を示す、gflags の簡単な紹介です: http://gflags.googlecode.com/svn/trunk/doc/gflags.html

Hackage のさまざまな getopt のようなライブラリを調べましたが、gflags のシンプルさと柔軟性に一致するものは見つかりませんでした。

つまり、次の機能が必要です。

  • --help を生成します (ヘルプに記載されているデフォルト値を使用)。
  • ユーザーが指定したオプションを解析するだけでなく、一致しないオプションでもエラーが発生する必要があるため、ユーザーはタイプミスに気付く機会があります。
  • フラグは任意のモジュールで簡単に宣言できます (できればトップレベルで、必要に応じてテンプレート Haskell ハッカーを受け入れます)。
  • 主に、フラグを宣言したすべてのモジュールを呼び出す必要はありません。代わりに、フラグは起動時/リンク時/いつでも登録されます。
  • gflags のように、main が一般的な初期化関数を呼び出さなければならない場合は問題ありません。
    google::ParseCommandLineFlags(&argc, &argv, true);
  • flags は純粋に使用できます (ええ、これは API をより単純にするための unsafePerformIO の適切な使用法だと思います)。

うまくいかなかった後、私はこれを自分でやろうというアイデアを試してみました (もちろん、Hackage で共有しました)。ただし、登録部分の実装についてはまったくわかりません。GCC の ((constructor)) 属性または C++ の静的初期化に似たものが必要ですが、Haskell です。標準の最上位の u​​nsafePerformIO は十分ではありません。これは遅延であるため、メインの実行が開始される前に呼び出されません。

4

2 に答える 2

3

Hackage ですべてのソリューションを調査した後 (すべてのヒントに感謝します!)、Don の型クラス実装のアイデアを進め、HFlags という名前のライブラリを作成しました。

これはハックされています: http://hackage.haskell.org/package/hflags

それを説明するブログ投稿もあります: http://blog.risko.hu/2012/04/ann-hflags-0.html

于 2012-04-30T14:16:48.847 に答える
2

CmdArgsが好きかもしれませんが、すべての制約を満たしているかどうかを判断するのに十分なほど使用していません。

于 2012-04-10T18:39:20.620 に答える