
On 8/31/05, Krasimir Angelov
wrote: 2005/8/31, Sebastian Sylvan
: On 8/31/05, Dinh Tien Tuan Anh
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
Mark Goldman writes: 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