
hi, i have been staring at a strange profile for a while now, and was wondering whether anybody could give me a hint. (using ghc.6.4. i know i should upgrade, but has the profiler changed after that in particular?) almost all time / memory costs occurs in a CAF cost center. as far as i understand, this means that the evaluation only takes place once each time i run the program, and doesn't depend on the input. Q1. why should one distinguish time spent in top-level constants from time spent in functions? (my program is basically a top-level constant that calls a function i am trying to understand with constant toy arguments.) curiously, the costs inherited by the CAF cost center and caused elsewhere do not show anywhere else, although i am pretty sure the call stack doesn't leave my code for another few levels. Q2. how can i learn which parts of my code causes the CAF cost centers to bloat? and what does it mean if the 100% inherited costs do not show in any other item in the cost center stack in my profile? user manual yields further confusion: | The cost of evaluating any expression in your program is attributed to | a cost-centre stack using the following rules: | | * If the expression is part of the one-off costs of evaluating the | enclosing top-level definition, then costs are attributed to the stack | of lexically enclosing SCC annotations on top of the special CAF | cost-centre. how can an expression be part of the one-off cost of anything? does the second part mean that the SCC annotations are on top of the special CAF cost-center? which is the special CAF cost-center? what does being on top of that mean? sorry, maybe i am just tired... :-/ | * Otherwise, costs are attributed to the stack of | lexically-enclosing SCC annotations, appended to the cost-centre stack | in effect at the call site of the current top-level | definition[7]. Notice that this is a recursive definition. | | * Time spent in foreign code (see Chapter 8, Foreign function | interface (FFI) ) is always attributed to the cost centre in force at | the Haskell call-site of the foreign function. thanks, matthias