It’d be good if all writes in a transaction were automatically transactional and we had no TVars, and also if all IO automatically made a transaction irrevocable.
But I’m not sure this is tractable in either implementation effort or runtime overhead.
I'm responding to the idea of the 'colour' of functions and suggesting how I think it should be in Ruby - all side effects transactional, but IO irrevocable. Drop the idea of TVar and make all mutable locations transactional.
But I’m not sure this is tractable in either implementation effort or runtime overhead.