GHCプロファイラ出力の型クラスの機能をデマングル
-
25-09-2019 - |
質問
GHCで書かれたHaskellのプログラムをプロファイリングする場合は、
、型クラスの関数の名前は、他からそれらの1つのインスタンスの実装を区別するために.profファイルにマングルされています。どのように私はそれがどのタイプのインスタンスを見つけるためにこれらの名前をデマングルすることができますか?
は例えば、私は種類のFast
とSlow
はShow
を実装して、次の両方のプログラムを、持っていると仮定します
import Data.List (foldl')
sum' = foldl' (+) 0
data Fast = Fast
instance Show Fast where
show _ = show $ sum' [1 .. 10]
data Slow = Slow
instance Show Slow where
show _ = show $ sum' [1 .. 100000000]
main = putStrLn (show Fast ++ show Slow)
私は-prof -auto-all -caf-all
と+RTS -p
し、実行してコンパイルします。生成されます.profファイルでは、私はトップのコストセンターであることがわかります:
COST CENTRE MODULE %time %alloc
show_an9 Main 71.0 83.3
sum' Main 29.0 16.7
ツリーで、Iは、同様に、(無関係な行を省略)参照
individual inherited
COST CENTRE MODULE no. entries %time %alloc %time %alloc
main Main 232 1 0.0 0.0 100.0 100.0
show_an9 Main 235 1 71.0 83.3 100.0 100.0
sum' Main 236 0 29.0 16.7 29.0 16.7
show_anx Main 233 1 0.0 0.0 0.0 0.0
私はshow_an9
がSlow
なくshow
の?
Fast
の実装であることをどのように把握します 解決
はありませんあなたがすることはできません。 _an9
と_anx
部分はランダムに生成されます。 (私は再びコンパイルするとき、私は_ane
と_anC
を得ました。)
あなたは手動でコストセンターを挿入するためにSCC
(セット・コストセンター)プラグマを使用することができます:
data Fast = Fast
instance Show Fast where
show _ = {-# SCC "show(Fast)" #-} show $ sum' [1 .. 10]
data Slow = Slow
instance Show Slow where
show _ = {-# SCC "show(Slow)" #-} show $ sum' [1 .. 100000000]
プロフィールが表示されるはずです。
main
show_an9
show(Slow)
sum'
show_anx
show(Fast)
所属していません StackOverflow