blob: 7f43bcf4986912973663efea5aec6f78426d1548 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
-- | A stupid Semaphore utility thing
module Control.Concurrent.Sema
( mapPool,
)
where
import Alpha
import Control.Concurrent.Async (mapConcurrently)
import qualified Control.Concurrent.MSem as Sem
-- | Simaphore-based throttled 'mapConcurrently'.
mapPool :: (Traversable t) => Int -> (a -> IO b) -> t a -> IO (t b)
mapPool n f xs = do
sima <- Sem.new n
mapConcurrently (Sem.with sima <. f) xs
|