La documentación para Control.Monad.List.ListT indica que "no produce una mónada a menos que la monad de argumento sea conmutativa".¿Cómo puedo saber si una mónada es conmutativa?
¿Cómo puedo saber si una mónada es conmutativa? ¿Hay una clase de tipo CommutativeMonad? Debería haber?
En particular, ¿es Control.Monad.RWS.Lazy.RWS una mónada conmutativa?
Yo diría lo contrario, la mayoría de las mónadas no son conmutativas, ¿puede nombrar algunos ejemplos además de 'Maybe' y' Reader'? – Tarrasch
Uso MonadSupply y Random con bastante frecuencia, y por supuesto están las implementaciones de ciertas estructuras de datos no ordenados como multisets. Pero esa es una crítica justa. – JeremyKun
MonadSupply no parece ser conmutativo según su definición. 'runSupply (do {a <- supply; b <- supply; return (a - b)}) [1,2]' → '-1' pero' runSupply (do {b <- supply; a <- supply; return (a - b)}) [1,2] '→' 1'. ¿Hay un error en mi razonamiento? – dave4420