
On 07/21/2013 11:52 PM, Chris Wong wrote:
[.. snipped ..]
A binding is memoized if, ignoring everything after the equals sign, it looks like a constant.
In other words, these are memoized:
x = 2
Just x = blah
(x, y) = blah
f = \x -> x + 1 -- f = ...
and these are not:
f x = x + 1
f (Just x, y) = x + y
If you remove the right-hand side of memoized_fib, you get:
memoized_fib = ...
This looks like a constant. So the value (map fib [0..] !!) is memoized.
If you change that line to
memoized_fib x = map fib [0..] !! x
GHC no longer memoizes it, and it runs much more slowly.
-- Chris Wong, fixpoint conjurer e: lambda.fairy@gmail.com w: http://lfairy.github.io/
Thanks. That's very helpful to know. Yet, it seems rather strange and arbitrary that "f x = ..." and "f = \x -> ..." would be treated in such a dramatically different manner.