Using the async package and the stm package exclusively, this web site shows how to use lightweight threads explicitly in IO. Haskell has more tools for parallel and conccurent.
parallel package enables us to write parallel computations as pure functions with lazy evaluation. We can separate evaluation strategies -- how to parallelize -- from computations by the package. It is very useful and interesting.
monad-par package provides parallel computations by Par monad, that is independent of lazy evaluation, and enables us to explicitly specify granularity of parallelization and dependencies of data. It can be used as both pure function and IO.
These many parallel/concurrent methods of Haskell are covered by a book Parallel and Concurrent Programming in Haskell. In addition to them, the book deals with many parallel and concurrent topics in detail: basic topics like the difference between parallel and concurrent, and advanced topics like a kind of automatic parallelizations. If you are not a Haskell user but a programmer who sometimes treats parallelism and concurrency, it must be helpful for you.