2010-05-11 26 views
8

Khi lược tả chương trình Haskell được viết bằng GHC, tên của các hàm typeclass bị xáo trộn trong tệp .prof để phân biệt việc triển khai thực hiện của một cá thể từ một tệp khác. Làm thế nào tôi có thể loại bỏ các tên này để tìm ra thể loại của nó là gì?Gỡ rối các chức năng kiểu chữ trong đầu ra hồ sơ GHC

Ví dụ, giả sử tôi có chương trình sau đây, nơi các loại FastSlow cả thực hiện 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) 

tôi biên dịch với -prof -auto-all -caf-all và chạy với +RTS -p. Trong tập tin .prof đó được tạo ra, tôi thấy rằng các trung tâm chi phí đầu là:

COST CENTRE     MODULE    %time %alloc 

show_an9      Main     71.0 83.3 
sum'       Main     29.0 16.7 

Và trong cây, tôi tương tự như vậy thấy (bỏ qua dòng không liên quan):

           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 

Làm thế nào để tìm ra rằng là thực hiện Slow của show và không phải là Fast của?

Trả lời

8

Không, bạn không thể. Các phần _an9_anx được tạo ngẫu nhiên. (Khi tôi biên dịch một lần nữa tôi có _ane_anC.)

Bạn có thể sử dụng (set-chi phí-center) pragma SCC để chèn một trung tâm chi phí bằng tay:

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] 

Các hồ sơ cần hiển thị:

main 
    show_an9 
    show(Slow) 
    sum' 
    show_anx 
    show(Fast) 
Các vấn đề liên quan