Using Haskell's type system to guarantee commutativity.