I wrote:
But looking at the two actions of interact:

interact f = do
   s <- getContents
   putStr (f s)
>>
I would expect the first action to be finished before the second

Keith Wansbrough wrote:
Why?

Because the actions are written down in that order? Why not? Why should I expect pipelining? Occam's razor demands the simplest theory.


For the use of laziness, consider

let fib = 0 : 1 : zipWith (+) fib (tail fib) in fib

and think what would happen if "let" was strict. Programming in Haskell can be much more convenient than in strict languages, and laziness is assumed in lots of little ways throughout idiomatic Haskell code (I'm thinking of the liberal use of "where" and "let" bindings, for example).

I know and appreciate these uses of laziness. There are plenty of examples where eager or lazy evaluation can bite you or save you. It's good to have both, and even better if you do not need to worry about it too often.


getContents behaves according to the specification in the standard, which is good enough for me. So does putStr.

Allow me to have another opinion, if the consequence is interleaved in- and output (when I don't want it).


Can actually someone supply an implementation of something like interact that does no pipelining for the argument "id"? Simply doing "putStr !$ f !$ s" was not enough!

HTH.

Thanks, Christian


_______________________________________________
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to