blob: 99d6fe240914406e0da2d1f70b8a487bfa428ca9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import Control.Concurrent
import Control.Monad
import Data.Compact
import Data.Compact.Internal
import qualified Data.Map as Map
import Data.Maybe
import System.Environment
main = do
[n] <- map read <$> getArgs
c <- compact ()
as <- forM [1..(n::Int)] $ \i -> async (compactAdd c (Just i))
bs <- forM as $ \a -> async (getCompact <$> takeMVar a)
xs <- mapM takeMVar bs
print (sum (catMaybes xs))
async :: IO a -> IO (MVar a)
async io = do
m <- newEmptyMVar
forkIO (io >>= putMVar m)
return m
|