Daniel Fischer wrote:
On 5/4/07, Phlex <[EMAIL PROTECTED]> wrote:
I'm trying to write a function with the signature [IO Int] -> IO [Int]
Control.Monad has a function (called "sequence") that does this for you. In fact,
"sequence" is a more generic solution since its signature is (
Monad m => [m a] -> m [a]).
Unfortunately, this won't work for infinite lists either, for those you'd need
an 'unsafe' action, namely 'unsafeInterleaveIO', like
import System.IO.Unsafe
conv :: [IO a] -> IO [a]
conv [] = return []
conv (x:xs) = do a <- x
as <- unsafeInterleaveIO (conv xs)
return (a:as)
*Test> :set -fno-print-bind-result
*Test> xs <- conv $ map return [1 .. ]
*Test> take 20 xs
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
HTH,
Daniel
Thank you all for the very good answers.
Sacha
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe