hw-prim-0.6.2.30: src/HaskellWorks/Control/Monad/Lazy.hs
module HaskellWorks.Control.Monad.Lazy
( interleaveSequenceIO
, interleaveSequenceM
) where
import Control.Monad.IO.Unlift
import qualified System.IO.Unsafe as IO
interleaveSequenceIO :: [IO a] -> IO [a]
interleaveSequenceIO [] = return []
interleaveSequenceIO (fa:fas) = do
a <- fa
as <- IO.unsafeInterleaveIO (interleaveSequenceIO fas)
return (a:as)
interleaveSequenceM :: MonadUnliftIO m => [m a] -> m [a]
interleaveSequenceM as = do
f <- askUnliftIO
liftIO $ interleaveSequenceIO (fmap (unliftIO f) as)