GHC で書かれた Haskell プログラムをプロファイリングするとき、型クラス関数の名前は .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
ツリーには、同様に次のように表示されます (関係のない行は省略します)。
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