User level transactional programming in Haskell, Peter Thiemann, 2006 Haskell Workshop. Correct handling of concurrently accessed external resources is a demanding problem in programming. The standard approaches rely on database transactions or concurrency mechanisms like locks. The paper considers two such resources, global variables and databases, and defines transactional APIs for them in Haske