On Tue, May 31, 2011 at 3:49 PM, Scott Lawrence <[email protected]> wrote: > I was under the impression that operations performed in monads (in this > case, the IO monad) were lazy. (Certainly, every time I make the > opposite assumption, my code fails :P .) Which doesn't explain why the > following code fails to terminate: > > iRecurse :: (Num a) => IO a > iRecurse = do > recurse <- iRecurse > return 1 > > main = (putStrLn . show) =<< iRecurse > > Any pointers to a good explanation of when the IO monad is lazy?
import System.IO.Unsafe iRecurse :: (Num a) => IO a iRecurse = do recurse <- unsafeInterleaveIO iRecurse return 1 More interesting variations of this leave you with questions of whether or not the missles were launched, or, worse yet, was data actually read from the file handle? Anthony _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
