Haskell supports many forms of concurrency and the most obvious being forking a thread using
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
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!