> -----Ursprüngliche Nachricht-----
> Von: "Rich Neswold" <[EMAIL PROTECTED]>
> Gesendet: 04.05.07 19:31:53
> An: Phlex <[EMAIL PROTECTED]>
> CC: [email protected]
> Betreff: Re: [Haskell-cafe] [IO Int] -> IO [Int]

On 5/4/07, Phlex <[EMAIL PROTECTED]> wrote:
> Hello all,
> 
> I'm trying to learn haskell, so here's is my first newbie question.
> I hope this list is appropriate for such help requests.
> 
> 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]

> 
> As a newbie, I found it educational to peruse the various modules in 
> "http://haskell.org/ghc/docs/latest/html/libraries/
> ". Just start looking at modules that sound interesting and see what has 
> already been defined. Some modules at first may be too advanced, but if you 
> go back to them in a few days (weeks?), they'll start making more sense, too.
> 

Very good advice, I think, and it's also very instructive to read the source 
code, you can learn a lot from that.

> 
> -- 
> Rich

HTH,
Daniel


_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to