haskell - segun - Transformadores de mónada con mónada de identidad.
monadologia leibniz resumen (2)
¿Qué sentido tiene usar un transformador de mónada con la mónada de identidad en lugar de usar la versión "estándar" del transformador?
¿Es más flexible?
De la Documentación: computacionalmente, no hay razón para usar la mónada de Identidad en lugar del simple hecho de simplemente aplicar funciones a sus argumentos. El propósito de la mónada de identidad es su papel fundamental en la teoría de los transformadores de mónada. Cualquier transformador de mónada aplicado a la mónada de Identidad produce una versión sin transformador de esa mónada.
Como lo entiendo, obtener la versión sin transformador de una mónada de un mónada transformador aplicando la mónada de identidad es exactamente lo que la mónada de identidad está ahí para. No hay ninguna ventaja sobre el simple uso de la mónada sin transformador, aunque a veces tiene que usar un transformador de mónada, por ejemplo, cuando una función que desea usar lo requiere.
De vuelta en mtl
1.0 teníamos ambos
newtype State s a = State { runState :: s -> (a, s) }
y
newtype StateT s m a = StateT { runStateT :: s -> m (a, s) }
Sin embargo, esto significaba que cualquiera que tuviera que implementar instancias para cosas como MonadState
duplicando esfuerzos.
En los transformers
(y las ahora desaparecidas monads-fd
y monads-tf
), Ross Paterson decidió utilizar el enfoque más simple de ofrecer solo esta última y usar la Identity
como la mónada base.
Esto llevó a una reducción en el esfuerzo de implementación para mantener el mtl
y eliminó el hecho de que había dos formas diferentes de implementar la mónada State
. Sin embargo, hizo que las mtl
internas de la mtl
más difíciles de enseñar, porque necesita entender las versiones de los transformers
desde el principio y no obtener la versión simplificada como ruedas de entrenamiento.
Cuando se retiró el antiguo mtl
y las monads-fd
convirtieron en el mtl
2.0, utilizando los transformers
existentes, esta decisión de diseño se mantuvo.
Personalmente me gustó tener al menos las mónadas simples separadas con fines pedagógicos, pero había muchas más personas al otro lado del debate.