Haskell Async lib

Eu estava tentando criar um thread e esperar no thread principal, mas era um pouco complexo ( https://gist.github.com/3469872 ): tive que criar um MVar ou Chan para saber quando o thread está pronto.

Esta é a melhor maneira de usar Control.Concurrent.Async

import Control.Concurrent
import Control.Concurrent.Async
import System.Random

delayedOutput
:: String -> IO ()
delayedOutput m
= do
gen
<- newStdGen
let (t, _) = randomR (1, 10) ge
-- delay in microseconds
threadDelay
(t * 1000000)
-- display message
putStrLn m

return ()

main
:: IO ()
main
= do
putStrLn
"Fight!"
a
<- async (delayedOutput "Finish him!")
wait a

return ()