On Sat, Oct 10, 2009 at 09:33:52AM -0700, Thomas Hartman wrote: > To: Luke Palmer <lrpal...@gmail.com> > Cc: mf-hcafe-15c311...@etc-network.de, haskell-cafe@haskell.org > From: Thomas Hartman <tphya...@gmail.com> > Date: Sat, 10 Oct 2009 09:33:52 -0700 > Subject: Re: [Haskell-cafe] How do I get this done in constant mem? > > > Yes, you should not do this in IO. That requires the entire > > computation to finish before the result can be used. > > Not really the entire computation though... whnf, no?
In that example, yes. But readFile takes the entire file into a strict String before it gives you the first Char, right? (Sorry again for my misleading code "simplification".) > main = do > let thunks :: IO [Int] > thunks = (sequence . replicate (10^6) $ (randomRIO (0,10^9))) > putStrLn . show . head =<< thunks -- prints > putStrLn . show . last =<< thunks -- overflows Meaning that the entire list needs to be kept? Is there a reason (other than "it's easier to implement and it's legal" :-) why the elements that have been traversed by "last" can't be garbage collected? -m _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe