@InProceedings{async01,
   author = {Simon Marlow and Simon {Peyton Jones} and Andrew Moran and John Reppy},
   title = {Asynchronous exceptions in {H}askell},
   booktitle = {PLDI '01: Proceedings of the ACM SIGPLAN 2001 conference on Programming language design and implementation},
   year = {2001},
   abstract = {Asynchronous exceptions, such as timeouts, are important for
robust, modular programs, but are extremely difficult to program with
--- so much so that most programming languages either heavily restrict
them or ban them altogether.  We extend our earlier work, in which we
added synchronous exceptions to Haskell, to support asynchronous
exceptions too.  Our design introduces scoped combinators for blocking
and unblocking asynchronous interrupts, along with a somewhat
surprising semantics for operations that can suspend.  We give a
formal semantics for our system, along with the first steps towards a
theory that enables us to prove program properties.  Using our
primitives we can define combinators that support (for example) robust
access to shared data; and using the theory we can prove that they
have no race conditions, regardless of the behaviour of the program's
environment.  Shazam!
},
   url = {http://community.haskell.org/~simonmar/papers/async.pdf},
   doi = {http://doi.acm.org/10.1145/378795.378858},
   isbn = {1-58113-414-2},
   pages = {274--285},
   location = {Snowbird, Utah, United States},
   publisher = {ACM Press}
}