では、簡単な質問です。関数を書きました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
次に、 traceIOfromDebug.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 に答える