
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