On Sat, 18 Oct 2003 19:17:06 -0700 (PDT) Hal Daume III <[EMAIL PROTECTED]> wrote: > It is unsafe because, in general, lazy IO is a bad idea. In particular: > > foo f x = do > h <- openFile x ReadMode > t <- hGetContents h > v <- f t > hClose h > return t > > will do substantially different things depending on the strictness of > 'f'. For instance, if 'f' is 'return . head', you might get a > 'head:: empty list' error, while if 'f' is 'evaluate . head', you won't.
I don't understand the details of your example (for instance, what does "evaluate" do? I found a reference to it in the GHC manual under Debug.QuickCheck, but couldn't figure out what it.), but get the general point. In my case, I wanted to represent a directory tree that was too big to fit in memory. I was planning on declaring it as data DirTree = DirTree File [DirTree] but then I apparently need lazy IO. If lazy IO is bad, is data DirTree = DirTree File [IO DirTree] a better way of doing it? P.S. Thanks for your haskell book. I read it and learned a lot. -- Ben Escoto
pgp00000.pgp
Description: PGP signature
_______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell