This package offers, among other things, the following selection of
synchronisation primitives:

    Broadcast: Wake multiple threads by broadcasting a value.

    Event: Wake multiple threads by signalling an event.

    Lock: Enforce exclusive access to a resource. Also known as a binary
    semaphore or mutex. The package additionally provides an alternative
    that works in the STM monad.

    RLock: A lock which can be acquired multiple times by the same
    thread. Also known as a reentrant mutex.

    ReadWriteLock: Multiple-reader, single-writer locks. Used to protect
    shared resources which may be concurrently read, but only
    sequentially written.

    ReadWriteVar: Concurrent read, sequential write variables.

This package was inspired by the concurrency libraries of Java and
Python.
