[Haskell-cafe] How to print a string (lazily)
Wolfgang Jeltsch
wolfgang at jeltsch.net
Tue Jan 3 17:12:36 EST 2006
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
More information about the Haskell-Cafe
mailing list