I started reading this paper on CRDTs, which is a way of sharing modifiable data concurrently by ensuring that the operations that modify the data are commutative. It seemed to
What I can't figure is how to phrase the contract that operations must commute in the specification of the typeclass.
The reason that you can't figure it out is that it's not possible. You can't encode this kind of property in types - not in Haskell at least.