On Sun, 15 Apr 2007 18:01:44 +0200 Mitar <[EMAIL PROTECTED]> wrote: > Hi! > > Is there a parallel version of mapM_? Like it is for map (parMap)?
This version will fork a new thread for each action: \begin{code} import Control.Concurrent import Control.Monad parSequence_ xs = do m <- newEmptyMVar mapM_ (\x -> forkIO x >> putMVar m ()) xs replicateM_ (length xs) (takeMVar m) parMapM_ f xs = parSequence_ $ map f xs \end{code} > I would like to execute actions in parallel as the computation of > necessary data for actions is quite computational heavy. But it does > not matter in which order those actions are executed. (I am rendering > pixels with OpenGL and it does not matter in which order I draw them, > but it matters that for one pixel it takes some time to calculate its > color.) > > The example would be: > > main :: IO () > main = do > -- the order of printed characters is not important > -- instead of putStrLn there will be a computationally big function > -- so it would be great if those computations would be done in > parallel -- and results printed out as they come > mapM_ rwhnf (putStrLn) ["a","b","c","d"] > > Is this possible? Without unsafe functions? And without changing the > semantics of the program. Of course the semantics of the program will change, the order in which the actions are executed is unknown! Cheers, Spencer Janssen _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe