多数のスレッドの終了を待つ

セマフォで書ける。

test n = do                                                                                                       
  sem <- newQSemN 0                                                                                               
  mapM_ (\i -> forkIO $ print i >> signalQSemN sem 1) [1..n]                                                      
  waitQSemN sem n

もっと綺麗な方法はあるのかな?