Wolfgang, > Haskell is non-strict but not necessarily lazy. So it's possible > that an expression is reduced to WHNF although it is not used yet. > Could this early reduction also happen to outputs of > unsafeInterleaveIO actions (which might trigger the action too early)? > While I'd expect those outputs to be evaluated lazily (reduced as > late as possible), I cannot find anything in the docs that guarantees > this.
"unsafeInterleaveIO allows IO computation to be deferred lazily. When passed a value of type IO a, the IO will only be performed when the value of the a is demanded. This is used to implement lazy file reading, see hGetContents." http://haskell.org/ghc/docs/latest/html/libraries/base/System-IO-Unsafe.html#v:unsafeInterleaveIO Is this the kind of guarantee you're looking for? I'd bet against getting any decent durable, portable guarantees for any unsafe* functions in Haskell; but the above behavioral description may be strong enough to suit you. > In addition, I'd like to know whether unsafeInterleaveIO outputs are > guaranteed to be evaluated at most once so that the interleaved action is > executed at most once. Again, I suppose that this is the case while I cannot > find a guarantee for it. I'd be surprised if an implementation didn't have that behavior. I'd also be wary of anyone claiming to guarantee it, beyond compiler X version Y. John Dorsey _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
