Doubly linked lists are often used in imperative languages to maintain a
collection of objects such that an object can remove itself easily. The
same idea applies here. Thanks to STM, these lists can be shared among
threads with little effort.

Suppose you have a thread listening for events. You want to dispatch
events to any thread that opts in. You could write a function that
installs an event handler, performs an action, and removes the handler: