https://wiki.haskell.org/Software_transactional_memory
