Stephen Hicks <stephenhi...@gmail.com> wrote: > Magnus Therning wrote: > > Martijn van Steenbergen wrote: > >> > >> Otherwise, you can use unsafeInterleaveIO: no unsafePerformIO or seq > >> needed, but there's still "unsafe" in that name there. This works for me: > ... > > Thanks, that does indeed work, but it still requires that "unsafe" there so > > I'm hesitant replacing the call to threadDelay with something more > > complicated, where it isn't obviously safe. > > Sorry for the late reply, but I'd like to piggy-back on this. It's my > understanding that unsafeInterleaveIO is only unsafe insofar as it > makes the IO lazy and so the IO may be performed later or never at all > (if its return value is never wanted) and is therefore no less safe > than, say, generating a list of IO actions as was suggested by an > earlier reply. It seems to me that its unsafeness is of a completely > different nature than unsafePerformIO... am I missing something?
There are two issues with unsafePerformIO: The laziness makes evaluation unpredictable to some extent, but that's intentional. But for example what if the IO computation throws an exception? There is no well-defined behaviour, not even a well-known convention. For example, hGetContents simply aborts, which makes errors undetectable. All in all, unsafeInterleaveIO is a handy tool, but you need to be careful about its side effects. Greets, Ertugrul. -- nightmare = unsafePerformIO (getWrongWife >>= sex) http://blog.ertes.de/ _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe