Haskell supports many forms of concurrency and the most obvious being forking a thread using forkIO
.
The function forkIO :: IO () -> IO ThreadId
takes an IO
action and returns its ThreadId
, meanwhile the action will be run in the background.
We can demonstrate this quite succinctly using ghci
:
Prelude Control.Concurrent> forkIO $ (print . sum) [1..100000000]
ThreadId 290
Prelude Control.Concurrent> forkIO $ print "hi!"
"hi!"
-- some time later....
Prelude Control.Concurrent> 50000005000000
Both actions will run in the background, and the second is almost guaranteed to finish before the last!