[Haskell-cafe] memoization

Tom Ellis tom-lists-haskell-cafe-2013 at jaguarpaw.co.uk
Mon Jul 22 23:43:22 CEST 2013


On Mon, Jul 22, 2013 at 04:16:19PM +0200, Andreas Abel wrote:
> In general, I would not trust such compiler magic, but just let-bind
> anything I want memoized myself:
> 
> memoized_fib :: Int -> Integer
> memoized_fib x = fibs !! x
>     where fibs  = map fib [0..]   -- lazily computed infinite list
>           fib 0 = 0
>           fib 1 = 1
>           fib n = memoized_fib (n-2) + memoized_fib (n-1)
> 
> The eta-expansions do not matter.

But this is *not* memoized (run it and see!).  The "eta-expansions" do
indeed matter (although I don't think they are truly eta-expasions because
of the desugaring of the where to a let).

What matters is not the let binding, but where the let binding occurs in
relation to the lambda.  There's no compiler magic here, just operational
semantics.

Tom




More information about the Haskell-Cafe mailing list