Mark Goldman writes:
> On 8/31/05, Krasimir Angelov <[EMAIL PROTECTED]> wrote:
> > 2005/8/31, Sebastian Sylvan <[EMAIL PROTECTED]>:
> > > On 8/31/05, Dinh Tien Tuan Anh <[EMAIL PROTECTED]> wrote:
> > > >
> > > > >Something like (untested)...
> > > > >
> > > > >xs <- zipWith ($) forkIO (map (\f -> f x y) funs)
> > > > >tids <- sequence xs
> > > > >
> > > >
> > > >
> > > > what does "zipWith ($)" do ?
> > >
> > > $ is function application, so zipWith ($) will "zip" a list of
> > > functions with a list of arguments, by applying the functions to
the
> > > arguments pair-wise, producing a list of results.
> >
> > But forkIO is function not a list of functions. The above example is
> > incorrect. I think it should be:
> >
> > tids <- sequence [forkIO (f x y) | f <- funs]
>
> The following corrects the zipWith example:
> xs <- zipWith ($) (repeat forkIO) (map (\f -> f x y) funs)
> tids <- sequence xs
>
It's not always obvious when to use sequence or mapM, but I think this
one calls for the latter.
mapM (\f -> forkIO (f x y)) funs :: IO [ThreadId]
If you don't care about the thread IDs, then this is more efficient:
mapM_ (\f -> forkIO (f x y)) funs :: IO ()
--
David Menendez <[EMAIL PROTECTED]> <http://www.eyrie.org/~zednenem/>
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe