"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Los monogramas son monolitos en la categoría de functores ...

Los monogramas son monolitos en la categoría de functores ...

Publicado el 2025-04-13
Navegar:589

A monad is a monoid in the category of endofunctors...

¿Qué es una mónada?

una mónada es un monoid en la categoría de endofunctors ...?

... Intentemos de nuevo:

una mónada es una abstracción utilizada en la programación funcional para manejar los cálculos de manera consistente. Es un patrón de diseño que permite el encadenamiento de las operaciones mientras encapsulan los efectos secundarios, como los cambios de estado, la E/S o los errores, de manera controlada.

Las mónadas pueden considerarse como una forma de envolver valores y aplicarles funciones, asegurando que los cálculos se realicen en un entorno predecible y controlado.

Mi comprensión personal es: una mónada es una estructura de datos con

  • un único valor inmutable (o función)
  • una función MAP/BIND para asignar una función a ese valor
  • una función return/aplante que devuelve el nuevo estado a una nueva mónada cada vez

Esto permite el encadenamiento y la composición de las operaciones de una manera que preserva la inmutabilidad y la pureza funcional: un enfoque de "inversa" de una clase, donde el estado no se puede modificar en el lugar, pero las transformaciones se aplican funcionalmente para producir nuevas instancias.

Esta "simetría inversa" resalta el contraste:

  • Las clases modifican su estado interno, manteniendo la mutabilidad y la interacción directa a través de métodos internos. La mayoría de las veces interactúan con un estado global

  • Las mónadas alcanzan resultados similares a una clase, pero al envolver valores y asignando transformaciones inmutables externas, no tienen efectos secundarios: no hay estado global

Ejemplo:

  • Clase: Una clase de caja contiene un valor y puede modificar el valor llamando a métodos como SetValue (NewValue), que muta el estado interno del cuadro.
  • Monada: Un Boxmonad contendría un valor de manera inmutable. Para transformar el valor, utilizaría una función como MAP, que aplica una función externa al valor y devuelve un nuevo BoxMonad, con el nuevo valor.

Proyecto de ejemplo en Python:
https://github.com/blackopsrepl/py-monad-task-manageRage&&&]

En esta aplicación, usamos la mónada estatal para administrar el estado de la lista de tareas. El Mónado del Estado proporciona una forma de modelar el proceso de gestión de tareas como una serie de transformaciones en el estado de la aplicación, mientras mantiene el estado inmutable.

En lugar de modificar directamente el estado de la lista de tareas, usamos la función return_ para envolver el estado inicial en un contenedor monádico, y la función de enlace para aplicar transformaciones al estado de manera predecible. Cada vez que se realiza una operación (como agregar, editar o eliminar tareas), devuelve una nueva instancia del estado, asegurando la inmutabilidad y la composición.

Funciones clave:

    return_: envuelve un valor en un contenedor monádico, convirtiéndolo en parte de la cadena de cálculo monádico.
  • bind: aplica una función al valor dentro de la monad, devolviendo un nuevo contenedor monádico con el valor transformado.
mediante el uso de la mónada estatal, podemos manejar las operaciones de gestión de tareas de una manera que garantice que el estado se actualice de manera inmutable y los cálculos se componen sin efectos secundarios o interacciones no deseadas entre las operaciones.

Declaración de liberación Este artículo se reimpresa en: https://dev.to/blacopsrepl/a-monad-is-a-monoid-in-the-category-of-endofunctors-47oi?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarlo.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3