警告:私はこれを試していない...
あなたはコンパイラフラグで完全にDebug.Trace
モジュールを交換することができます。 Debug.Trace
の関数のささいな実装で別のモジュールを作成します。
module NoTrace (trace) where:
trace :: String -> a -> a
{-# INLINE trace #-}
trace _message = id
...
no-trace
という名前の別のパッケージにこのモジュールを入れてください。
Debug.Trace
を除いて、ベースパッケージからincluding every moduleによってghcへの引数のDebug.Trace
モジュールを非表示にします。 Debug.Trace
をパッケージのNoTrace
に交換してください。
ghc -package="base (Control, Control.Applicative, ..., Data.Word, Foreign, ...)" \
-package="no-trace (NoTrace as Debug.Trace)" \
...
これはtrace
Sを削除するrewrite rulesを持っていたものとプレリュードを交換するのプレリュードを変更するコンパイラフラグを使用してのクレイジーなアイデアから来たが、それらの書き換えルールは、モジュールをインポートしたものを汚染チェックでしょう下流の輸入者が依然として痕跡を使用したがっているにもかかわらず、それらとともに編集された。前奏曲を置き換える方法を調べると、ghcは代わりにどのモジュールも置き換えることができることがわかりました。
私はこれらのような質問に答えることについて常にフェンスにいます。 "私は道を知りません"というのは本当の答えではありませんが、誰もそれを言うつもりがなければ、まったく反応がありません。 –
GHCはいくつかの別々のコンパイルを行います。定義モジュールがアンフォールディングを公開していない場合、呼び出しモジュールはオブジェクトコードでスタックされます。 – dfeuer
私のコンピュータでは今はありませんが、assert内でトレースを呼び出すことはどうですか? –