which to implement an STM • It was originally 100 lines of code, and even now it’s only about 600 lines of C! • It exploits three properties of the language: purity, immutability and laziness • Haskell retries an STM transaction as needed. Immutability allows it to do this fearlessly, and laziness avoids fully evaluating the transaction • STM is harder in other languages. For instance in Clojure you have to manually implement rollback functionality. https://begriffs.com/posts/2016-04-02-software-transactional-memory.html