4 | ||| A lock: a function that runs an action while holding mutual exclusion, for
5 | ||| any result type. `Synchronized.newLock` allocates one.
11 | ||| A monad whose actions can run under mutual exclusion. Sequential `IO` runs
12 | ||| can't race, so its lock is a no-op; a concurrent driver provides a real lock.