Suppose I have a list of IO computations that depends on a few very
time consuming pure operations. The pure operations are not dependent
on the real world:
> computation :: [IO Int]
> computation = [
> smallIOfunc timeConsumingPureOperation0
> , smallIOfunc timeConsumingPureOperation1
> , smallIOfunc timeConsumingPureOperation2
> , smallIOfunc timeConsumingPureOperation3
> ]
> where smallIOfunc a = print a >> return a
In my main function I would like to repeatedly print the values
> main = forever $
> sequence_ (map (>>=print) computation)
When I do this, all the time consuming operations will be reevaluated
every run of the main loop. Is there a any (simple or smart) way to
prevent the garbage collector from cleaning up the fully evaluated
thunks inside my computation? As if it were something like this:
> computation :: [IO Int]
> computation = [smallIOfunc 42, smallIOfunc 34385, smallIOfunc 3,
smallIOfunc 55]
Of course I could plugin some kind of Int memoizer inside my
computation, but I do not really have the control to change things
`deep' inside the code. I want to have some form of snapshot of a list
of partially evaluated IO computations...
Any suggestions?
Tanks,
Sebastiaan
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe