Thanks - I was aware of par and it's ilk, but I couldn't imagine any way of doing the latter... how can you actually force something pure to get calculated in a worker thread?
But thinking now, I guess judicious use of seq or deepseq is appropriate. Something like this might work. workerThread :: (a->b) -> MVar a -> MVar b -> IO () workerThread f inp out = do a <- takeMVar inp let b = f a in (b `seq` putMVar out b) workerThread f inp out In a spare moment I'll have to give it a go. Tim -----Original Message----- From: Don Stewart [mailto:[EMAIL PROTECTED] Sent: Tuesday, 6 November 2007 11:16 AM To: Tim Docker Cc: haskell-cafe@haskell.org; Bulat Ziganshin Subject: Re: [Haskell-cafe] Go parallel timd: > Is it possible to use the forkIO primitive to cause pure computations > to be evaluated in parallel threads? > > It seems to me that laziness would always prevent any evaluation until > the result was used in a consuming thread (and hence would occur > serially, in that thread). Try `par` and friends in Control.Parallel. You can also build referentially transparent worker gangs on top of forkIO. -- Don _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe