Concurrency in GHC and Hugs is "lightweight", which means that both
thread creation and context switching overheads are extremely low.
Scheduling of Haskell threads is done internally in the Haskell
runtime system, and doesn't make use of any operating system-supplied
thread packages.

Haskell threads can communicate via MVars, a kind
of synchronised mutable variable. Several common concurrency
abstractions can be built from MVars, and these are
provided by the Concurrent library, which is
described in the later sections. Threads may also communicate via
exceptions.