¿Por qué se considera que el transformador de mónada ListT es defectuoso ? ¿ Qué leyes de mónada rompe?
He visto mencionado que
ListT
es un ejemplo clásico de un transformador de mónada con errores que no satisface las leyes de la mónada .
¿Se puede demostrar esto con un simple ejemplo?
Editar: Mi idea con ListT []
es un poco equivocada, me perdí que la documentación requiere que la mónada interna sea conmutativa. Por lo tanto, es ListT
buggy solo en el sentido de que tiene este requisito, o hay otro problema? (Los ejemplos en Haskell wiki todos usan ListT IO
y IO
obviamente no es conmutativo.)
24
Author: Petr Pudlák, 2012-09-27
1 answers
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]]
Más ejemplos (la mayoría usando IO
) y una solución para arreglar ListT
se pueden encontrar en ListT done right.
19
Author: Petr Pudlák,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-27 09:12:58
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-27 09:12:58