Справедливая параллельная функция `map` в haskell? - PullRequest
4 голосов
/ 10 мая 2011

Скажем, я имитирую какую-то сеть, и у меня есть функция, которая передает значение по списку Chans:

broadcast :: a -> [Receiver] -> IO ()
broadcast a = mapM_ (send a)

Это "отправит" данные каждому получателю по порядку.Вместо этого я хотел бы транслировать недетерминированно всем получателям.

Спасибо за любые подсказки.

Ответы [ 2 ]

3 голосов
/ 10 мая 2011

Как насчет использования параллелизма GHC?

broadcast :: a -> [Receiver] -> IO ()
broadcast a = mapM_ (forkIO . send a)

Затем обязательно используйте резьбовой RTS (скомпилируйте с ghc -threaded).

2 голосов
/ 10 мая 2011

http://hackage.haskell.org/package/random-shuffle-0.0.2

broadcast a rs = do 
   g <- newStdGen
   mapM_ (send a) $ shuffle' rs (length rs) g
...