Hello haskell, is it possible to implement unsafeInterleaveST? why i want it: i have the following definitions: class (MonadHelper m) => Stream m h where vGetContents :: h -> m String -- default definition vGetContents h = mUnsafeInterleaveIO $ do eof <- vIsEOF h if eof then return [] else do x <- vGetChar h x `seq` return () xs <- vGetContents h return (x:xs) class (Monad m) => MonadHelper m where mUnsafeInterleaveIO :: m a -> m a instance MonadHelper IO where mUnsafeInterleaveIO = unsafeInterleaveIO instance MonadHelper (ST s) where mUnsafeInterleaveIO = id that allows to make much more efficient lazy implementation of vGetContents for streams that work in IO monad. on the other side, ST-based streams will need to build full list before returning from vGetContents. if the unsafeInterleaveST is possible, then this type of computations will become much more efficient moreover, this can be way to mix up several ST computations and to implicitly define parallelism in algorithm so that compiler can better optimize program -- Best regards, Bulat mailto:bulatz@HotPOP.com