[Haskell-cafe] Re: Tutorial uploaded

Philippa Cowderoy flippa at flippac.org
Wed Dec 21 13:58:14 EST 2005

On Wed, 21 Dec 2005, Peter Simons wrote:

>  > Some example for writing a text the IO oriented way:
>  >   do putStrLn "bla"
>  >      replicateM 5 (putStrLn "blub")
>  >      putStrLn "end"
>  >
>  > whereas the lazy way is
>  >   putStr (unlines (["bla"] ++ replicate 5 "blub" ++ ["end"]))
> Um, maybe it's just me, but I think the first program is far
> superior to the second one. The last thing you want your I/O
> code to be is lazy. You want the exact opposite: you want it
> to be as strict as possible. Not only does the second
> version waste a lot of CPU time and memory for pointlessly
> constructing a lazily evaluated list nobody ever needs, it
> will also explode into your face the moment you use that
> approach to write any non-trivial number of bytes.

Surely the actual explosion comes about because PutStr forces the lot at 
once? If PutStr were to evaluate a character at a time, the laziness would 
be slow and spew a lot of garbage to collect but not hang on to as much 
space as you suggest.

Not to say that the strict solution isn't still more efficient, of course.

flippa at flippac.org

The task of the academic is not to scale great 
intellectual mountains, but to flatten them.

More information about the Haskell-Cafe mailing list