Am Dienstag, 3. Januar 2006 19:15 schrieb Daniel Carrera:
> Neil Mitchell wrote:
> > All Haskell functions are lazy, hence there is no need to "write a
> > lazy version" of your print_list function. I think the function you
> > probably want is:
> >
> > putStr (unlines xs)
>
> Hhmm... that does work, and I'm a bit surprised that it does. I guess
> I'm still stuck in the eager computation mindset. I would expect putStr
> to have to wait for the (unlines xs) to be finished before doing any
> printing, but it doesn't.

(unlines xs) is only evaluated on demand.  Think of putStr as defined as 
follows:

        putStr :: String -> IO ()
        putStr []
                = return ()
        putStr (x : xs)
                = do
                        putChar x
                        putStr xs

Every character of the string is evaluated when it is needed by putChar x, not 
earlier.  So the argument of putStr is evaluated lazily.

> [...]

> Some day I'll get the hang of this lazy evaluation thing. :)

Yes. :-)  Lazy evaluation is really powerful. ;-)

> > The first one has fewer monads, so I prefer it, but take your pick :)
>
> Monads scare me, so I'll pick the first :)  Thanks!

It is preferable because it does more of the work without imperative 
programming.

> Cheers,
> Daniel.

Best wishes,
Wolfgang
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to