
31 May
2011
31 May
'11
4:48 p.m.
Scott Lawrence
On 05/31/2011 04:20 PM, Artyom Kazak wrote:
Suppose iRecurse looks like this: iRecurse = do x <- launchMissiles r <- iRecurse return 1
As x is never needed, launchMissiles will never execute. It obviously is not what is needed. Prelude> let launchMissiles = putStrLn "UH OH" >> return 1 Prelude> let iRecurse = launchMissiles >> return 1 Prelude> iRecurse UH OH 1 Prelude> Looks like launchMissiles /does/ execute, even though x is (obviously) never needed.
Oh, sorry. I was unclear. I have meant "assuming IO is lazy", as Yves wrote. And saying "some hacks" I meant unsafeInterleaveIO, which lies beneath the laziness of, for example, getContents.