[Haskell-cafe] Announce: ghc-core, command line pager for reading GHC Core

Henning Thielemann lemming at henning-thielemann.de
Fri May 23 12:31:24 EDT 2008

On Fri, 23 May 2008, Henning Thielemann wrote:

> An even more advanced tool could show differences between two Core listings. 
> Say I have a program which runs too slow. But if I change a small detail it 
> runs significantly faster - I want to know, how did my change in the Haskell 
> file modified the Core and why the speedup.
> Showing differences between Core files will certainly be complicated because 
> the generated identifiers are completely different. I don't know whether the 
> order of declarations is a problem.
> I have an example here where a program becomes faster by a factor of 10 with 
> a rather small change. First I thought the slow thing must be the higher 
> order function which occurs in the Core and is not inlined, but it is present 
> in the slow and the fast variant of the program.

In this special example, actually simple 'diff' spotted the critical 
difference, namely a polymorphic function was called. Now I'm in a 
dilemma: I can either INLINE the function, then it's whole body is copied 
into main program, which is not necessary here. However this solution 
would guarantee speed in every case. Or I can SPECIALISE the function, 
then the function will only be called, but with polymorphism overhead 
eliminated. This would only work for a restricted range of types. I'd like 
to have a pragma, that tells GHC to specialise a function for every type 
it is called with.

More information about the Haskell-Cafe mailing list