Marc Weber wrote: > stefan has pointed me a nice version: > > Anyway I'm curious why > > ============= ======================================================= > randomInts :: IO [Int] > randomInts = unsafeInterleaveIO $ > sequence $ cycle [unsafeInterleaveIO randomIO] > ============= ======================================================= > > doesn't return.
sequence isn't lazy (not in the IO monad at least); it will try to run to completion, returning an infinite list of (as yet unevaluated, due to unsafeInterleaveIO) thunks. The construction of that list will never finish though. I think you want something like (untested) > unsafeInterleaveSequence :: [IO a] -> IO [a] > unsafeInterleaveSequence [] = return [] > unsafeInterleaveSequence (x:xs) = > unsafeInterleaveIO $ liftM2 (:) x (unsafeInterleaveSequence xs) > > randomInts = unsafeInterleaveSequence $ repeat randomIO or maybe (unsafeInterleaveIO randomIO) instead of randomIO. Bertram _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe