コマンドラインスイッチに応じて、アルゴリズムAまたはアルゴリズムBのいずれかを使用することができます。または 'debug'フラグが何らかの形で設定されていると、stdoutに冗長な情報を出力するようにしてください。Haskellのグローバルフラグを適切に扱うための適切な方法
どのようにグローバルフラグを実装する必要がありますか?
私は4つのオプションを参照してください、それらのすべては本当に良くありません。
1)IOモナドを必要とし、コア計算関数がすべて純粋なので、関数からのコマンドライン引数を読んでください - 悪いです。私はIOを取得したくありません。
2)main/IOのパラメータを、動作を変更する必要がある 'leaf'関数に渡します。これは、このパラメータを渡すために異なるモジュールの無関係の関数を変更することを意味します。毎回ラッピングコードを変更せずにこのような設定オプションを何度も試してみたいと思います。
3)unsafePerformIOを使用すると、真のグローバル変数を取得できます。このような単純な問題のために、面倒で不慣れだと感じます。
4)機能の真ん中には、両方のオプションのコードがあり、そのうちの1つをコメントアウトします。あるいは、関数do_stuff_Aとdo_stuff_Bを持っていて、どの関数が 'needDebugInfo = True'というグローバル関数に応じて呼び出されるかを変更します。これは私がdebuginfoのためにやっていることですが、コンパイルなしで変更することはできません。実際には利用可能な最良の方法ではありません...
私はグローバルな変更が必要ない状態 - 私は実行時に不変の単純なグローバルフラグを持っているが、プログラムの起動時に何とか設定することができます。オプションはありますか?