Одним из основных преимуществ программной транзакционной памяти, которая всегда упоминается, является способность к компоновке и модульность. Различные фрагменты можно комбинировать для получения более крупных компонентов. В программах с блокировкой это часто бывает не так.
Я ищу простой пример, иллюстрирующий это с помощью реального кода. Я бы предпочел пример в Clojure, но Haskell тоже в порядке. Бонусные очки, если в этом примере также есть код на основе блокировки, который не может быть легко скомпонован.