title: How do I find out whether a monad is commutative?
body: <p>The documentation for <a href="http://hackage.haskell.org/packages/archive/mtl/latest/doc/html/Control-Monad-List.html" rel="noreferrer">Control.Monad.List.ListT</a> states that it "does not yield a monad unless the argument monad is commutative."</p>
  
  <ol>
  <li><p>How do I find out whether a monad is commutative? Is there a CommutativeMonad typeclass? Should there be?</p></li>
  <li><p>In particular, is <a href="http://hackage.haskell.org/packages/archive/mtl/latest/doc/html/Control-Monad-RWS-Lazy.html" rel="noreferrer">Control.Monad.RWS.Lazy.RWS</a> a commutative monad?</p></li>
  </ol>