Last Updated: February 25, 2016
·
1.54K
· deteam

Haskell Async lib

I was trying to create a thread and wait in main thread, but it was a little bit complex ( https://gist.github.com/3469872 ): had to create an MVar or Chan to know when thread is done.

Here's better way using 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 ()

2 Responses
Add your response

over 1 year ago ·
over 1 year ago ·