> -----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