では、簡単な質問です。関数を書きましたdebug :: String -> IO ()
。プログラムをある方法でコンパイルすると、この関数が標準エラーに書き込み、別の方法でプログラムをコンパイルすると、この関数がノーオペレーションになるように設定したいと思います。それを行うための簡単なコンパイル時の切り替えはありますか? それとも、自分で何かを実装する必要がありますか?
3 に答える
2
stack
ここで提供された優れた回答を補完するために、(私のような) 人々が最新バージョンのを使用している場合に備えて、このアプローチについて言及したいと思いhpack
ます
package.yaml
ファイルに次を追加しました。
flags:
debug: # Or whatever name you want to give to the flag
description: Enable debug
manual: True
default: False
when:
- condition: flag(debug)
cpp-options: -DDEBUG
次に、 traceIO
fromDebug.Trace
と組み合わせて使用することをお勧めしますNoTrace
。これにより、コードがフラグtraceIO
なしでコンパイルされたときに効果がなくなります。debug
{-# LANGUAGE CPP #-}
-- ...
#ifdef DEBUG
import Debug.Trace
#else
import Debug.NoTrace
#endif
-- ...
someFunc :: IO ()
someFunc = do
-- ...
traceIO "Whatever..."
スタックを使用する場合、次のオプションdebug
を使用してフラグを有効にできます。--flag
stack build --flag "your-package:debug"
または、パッケージをテストしている場合:
stack build --flag "your-package:debug"
を使用しない場合は、 hammarhpack
で説明されているように cabal ファイルを構成できます
。
于 2018-01-03T17:32:05.890 に答える