Fun with GHC's optimiser

Manuel M. T. Chakravarty chak@cse.unsw.edu.au
Fri, 22 Dec 2000 17:13:07 +1100


Simon,

> But I think the way to handle
> it is this.  Suppose we have
> 
> 	f x y = ....(f ex (C a b))...
> 
> where C is a constructor, and where y is scrutinised by a 
> case expression somewhere in f's body.  Then, in this recursive
> call to f, we know what y will be, and we could save the case in 
> the recursive call.  So make a specialised version of f, thus:
> 
> 	fs x a b = let y = C a b in (...original body of f...)
> 
> Now add a RULE to f, saying
> 
> 	f x (C a b) ===> fs x a b
> 
> This is very much the way type specialisation works.  Now every
> call to f that has a (C a b) argument will benefit.  Including
> the recursive call to f in fs's RHS, so fs will become the self-recursive
> tight loop you want, leaving f as a sort of 'impedence matcher' for
> callers elsewhere.

Sounds like a good idea to me :-)

Cheers,
Manuel