The 'io!' macro marks a code block to have side effects which prevents using it in a STM transaction as 'dosync' might need to execute the functions multiple times in case of conflicts during the optimistic locking.
Re:Haskell vs. Clojure (2014)
by catnaroek on Wednesday September 14, 2016 @07:17PM
(#12502038)
> properly used
In the sense C programmers use the term? Why should humans be trusted with identifying all operations that can't be safely performed within a transaction?
https://clojuredocs.org/clojure.core/io℅21
The 'io!' macro marks a code block to have side effects which prevents using it in a STM transaction as 'dosync' might need to execute the functions multiple times in case of conflicts during the optimistic locking.