Asynchronous exceptions, such as timeouts, are important for-robust, modula
r programs, but are extremely difficult to program with - so much so that m
ost programming languages either heavily restrict them or ban them altogeth
er. We extend our earlier work, in which we added synchronous exceptions to
Haskell, to support asynchronous exceptions too. Our design introduces sco
ped combinators for blocking and unblocking asynchronous interrupts, along
with a somewhat surprising semantics for operations that can suspend. Uniqu
ely, we also give a formal semantics for our system.