
#11713: STM Finalizers -------------------------------------+------------------------------------- Reporter: mc.schroeder | Owner: Type: feature | Status: new request | Priority: normal | Milestone: Component: Runtime | Version: 8.1 System | Keywords: | Operating System: Unknown/Multiple Architecture: | Type of failure: None/Unknown Unknown/Multiple | Test Case: | Blocked By: Blocking: | Related Tickets: Differential Rev(s): | Wiki Page: -------------------------------------+------------------------------------- This is some work I did as part of my master's thesis [1]. It's an extension to GHC's STM implementation. The main idea is to introduce a new primitive function {{{#!hs atomicallyWithIO :: STM a -> (a -> IO b) -> IO b }}} Like the existing atomically operation, atomicallyWithIO performs an STM computation. Additionally, it takes a '''finalizer''', which is an arbitrary I/O action that can depend on the result of the STM computation, and combines it with the transaction in such a way that: 1. The finalizer is only performed if the STM transaction is guaranteed to commit. 2. The STM transaction only commits if the finalizer finishes without raising an exception. A detailed specification, including an operational semantics, as well as a discussion of the implementation, can be found in chapter 2 of my thesis [1]. ---- I actually did this work quite some time ago, and even announced it on the mailing list [2] to some positive feedback, but then never got around to actually submitting a patch. Last week Charles Strahan wrote me on GitHub and got me motivated again, so here I am :) I'm submitting a code review to Phabricator right now and will link it to this ticket. ---- [1] https://github.com/mcschroeder/thesis [2] https://mail.haskell.org/pipermail/haskell-cafe/2015-July/120589.html -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11713 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler