que he visto mencionado que¿Por qué el transformador de mónada ListT se considera defectuoso? ¿Qué leyes de mónada se rompen?
ListT
es un ejemplo clásico de un transformador mónada con errores que no satisface la monad laws.
¿Se puede demostrar esto con un simple ejemplo?
Editar: Mi idea con ListT []
es un poco mal, que se perdió que el documentation requiere la mónada interior para ser conmutativa. Entonces, ¿ListT
tiene errores solo en el sentido de que tiene este requisito, o hay otro problema? (El examples at Haskell wiki todos utilizan ListT IO
y IO
obviamente no es conmutativa.)
La documentación dice que la mónada transformada debe ser conmutativa; pruébalo con, por ejemplo, 'v n = ListT $ map (leer :: String -> Int). permutaciones. espectáculo . (+ n) ' – applicative
@applicative Buen punto, me lo perdí. Intenté con la mónada '(->)', pero hasta ahora no pude encontrar un contraejemplo. –
Bueno ... se llaman "transformadores de mónada", no "transformadores de mónada conmutativa". Si definiera un transformador que solo funcionara correctamente cuando se aplica a algunas mónadas específicas, ¿alguien lo consideraría satisfactorio? –