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