[Haskell-beginners] Caching evaluation of lazy lists

Philip Scott haskell-beginners at foo.me.uk
Fri Oct 23 07:51:52 EDT 2009


Hi folks,

Quick question for you. Suppose I have some lazy list, x, which is very 
expensive to evaluate, and I want to do something with it more than 
once; for example:

f x = g (take 5 x) (take 6 x)

Is Haskell clever enough to only evaluate the list as much as is needed, 
or will it evaluate it once to get the first five values, and again to 
get the first 6 (when really it only needed to get one more). Or is it 
really really clever, and works out it needs to take 6 to begin with, 
then just give you the first 5 for the first call?

More tricky - is there a way to make that cache (if it exsists) persist 
in an interactive session? Eventually I am intending to write my own 
application with a little console at the bottom which does some 
ghci-esque magic, but for now lets say I am in ghci and I want to call f 
again with the same list. Is there a way to avoid it from forcing a 
recomputation of my lazy list?

Any advice greatly appreciated,

Philip


More information about the Beginners mailing list