waitAll :: [Async a] -> IO [(Async a, a)]
waitAll asyncs =
  atomically . sequence $ map (\a -> do r <- waitSTM a; return (a, r)) asyncs
waitAll :: [Async a] -> IO [(Async a, a)]
waitAll asyncs =
  atomically . sequence $ map (\a -> do r <- waitSTM a; return (a, r)) asyncs
waitAll asyncs =
  atomically . sequence $ map (\a -> do r <- waitSTM a; return (a, r)) asyncs