significa que monadas monada leibniz filosofia espiritual haskell functional-programming monads monad-transformers

haskell - que - monadas leibniz



¿Por qué el transformador de mónada ListT se considera defectuoso? ¿Qué leyes de mónada se rompen? (1)

He visto mencionada que

ListT es un ejemplo clásico de un transformador de mónada con errores que no cumple con las leyes de mónada .

¿Se puede demostrar esto con un simple ejemplo?

Edit: Mi idea con ListT [] está un poco equivocada, me perdí que la documentation requiere que la mónada interna sea conmutativa. Entonces, ¿es ListT Buggy solo en el sentido que tiene este requisito, o hay otro problema? (Los ejemplos en la wiki de Haskell utilizan ListT IO y IO obviamente no es conmutativo).


Un ejemplo simple que muestra cómo falla la ley de asociatividad:

v :: Int -> ListT [] Int v 0 = ListT [[0, 1]] v 1 = ListT [[0], [1]] main = do print $ runListT $ ((v >=> v) >=> v) 0 -- = [[0,1,0,0,1],[0,1,1,0,1],[0,1,0,0],[0,1,0,1],[0,1,1,0],[0,1,1,1]] print $ runListT $ (v >=> (v >=> v)) 0 -- = [[0,1,0,0,1],[0,1,0,0],[0,1,0,1],[0,1,1,0,1],[0,1,1,0],[0,1,1,1]]

Se pueden encontrar más ejemplos (principalmente con IO ) y una solución sobre cómo corregir ListT en ListT .