¿Para qué se usan las mónadas en ingeniería de software?

Las mónadas se utilizan prácticamente en todas partes en la ingeniería de software. No siempre somos conscientes de ellos. Pero donde sea que esté usando listas, errores, estados, analizadores, futuros, E / S o generadores de números aleatorios, es muy probable que esté haciendo uso del hecho de que estas cosas forman mónadas.

La funcionalidad básica proporcionada por todas las mónadas (y, por lo tanto, la razón para usarlas como mónadas) es la sustitución y la normalización . Lo básico que una mónada le permite hacer es la asignación de variables y sustituir las subexpresiones por variables. La mónada luego vuelve a normalizar la expresión a una nueva que tiene sus subexpresiones injertadas donde solían estar las variables. Cada mónada tiene algún efecto y el procedimiento de renormalización (la unión monádica o la transformación natural µ ) determina cómo se combinan los efectos.

Por ejemplo, en una lista de enteros, puede ver cada uno de ellos como una variable. Entonces, si tiene una función de enteros a listas (de tipo Integer -> List x ), puede sustituir una lista de valores de tipo `x` para cada una de las variables enteras que le da una lista de listas. Luego, elimina los corchetes internos (normalizar) para terminar con una lista simple donde cada uno de sus enteros ha sido reemplazado por cero o más elementos de tipo `x`. Aquí está eso en acción:

  para {
   i <- enteros
   r <- númerowang (i)
 } rendimiento r

Con una mónada de error, tendrá alguna expresión `e` que sea un error o un valor. Puede ver ese valor como una variable y sustituir la variable por otra expresión `f` (que también podría ser un error). Cuando la mónada se renormaliza, obtienes una sola expresión `g`. Si `e` hubiera fallado, entonces` g` falla con ese error. De lo contrario, falla con el error de `f`, o tiene éxito si no hubo errores. Ejemplo:

  para {
   i <- mightError
   r <- mightAlsoError (i)
 } rendimiento r

Podríamos repetir este patrón para todas las mónadas. Pero el poder real proviene del hecho de que podemos abstraernos de la mónada y escribir programas que no solo funcionen con listas, o solo con futuros, o simplemente con errores, sino con cualquier mónada. Todos comparten una interfaz común que podemos explotar y programar. En la práctica, hay una enorme biblioteca de funciones que pueden escribirse de una vez por todas y reutilizarse para cualquier mónada. Y como las mónadas están en todas partes, esto es muy útil.

Para los teóricos de la categoría, las mónadas que se utilizan en ingeniería de software son específicamente (generalmente) las mónadas en Set .

Desafortunadamente, el término “mónada” a menudo hace más para ocultar que para iluminar. Las mónadas son un concepto en la teoría de categorías, pero si las ve desde esta perspectiva, puede ser difícil ver por qué serían útiles en informática.

De hecho, las mónadas son el tipo de cosas que los programadores podrían inventar en la práctica muchas veces como parte de la resolución de un problema mayor, simplemente no se les ocurriría darle un nombre.

Un truco común que emplea el concepto de mónada es como una forma de introducir el “estado mutable” en lenguajes de programación funcionales puros como Haskell.

Estos lenguajes se denominan “puros” porque las funciones dentro del lenguaje no pueden cambiar nada más que su propio resultado, pueden no tener “efectos secundarios”. Esto significa que si llama a la misma función con los mismos parámetros, siempre devolverá el mismo resultado, al igual que una calculadora de bolsillo. Esto se considera una cualidad útil.

Desafortunadamente, en el mundo real, esto también puede ser una limitación, ya que significa que las funciones no pueden hacer cosas como obtener alguna entrada de un usuario o enviar algunos datos a través de Internet.

Haskell evita esto usando mónadas para “poner en cuarentena” el estado mutable, permitiendo que el lenguaje mantenga su pureza y separando las partes impuras de él. En esencia, construyes tu código Haskell a partir de componentes puros y luego usas mónadas para unirlos de una manera que permita la impureza de una manera limitada.

No te voy a hundir en el pantano académico ni nada, pero las listas, los mapas, etc. son todas mónadas. Sin mencionar la mónada de E / S utilizada en prácticamente todos los programas útiles. Entonces, en resumen, las mónadas están en todas partes. * editar: la mónada Parsec es otra gran.

Si su pregunta es, ¿dónde se utilizan las mónadas en ingeniería de software desde un punto de vista matemático, eso es un poco más difícil. Lo más probable es que, si tiene algún tipo de datos estructurados extraños que haya creado, podría exprimirle más funcionalidades al instaurarlo con el tipo de mónada. Después de eso, ya sea que lo analice o no desde el punto de vista de los diagramas conmutativos, depende completamente de usted.

More Interesting

¿Cómo amplío la importancia de la informática teórica a alguien que ha trabajado en la industria del software toda su vida?

¿Cuáles son los cursos matemáticos recomendados para el aprendizaje automático y el procesamiento de big data?

Si tengo una prueba potencial de que P = NP, ¿con quién puedo compartirla para que no me juzguen?

¿Qué matemática puede o no puede hacer una computadora?

¿Alguien puede escribir una función Javascript que haga esto: add (1) (2) (8) debería devolver 11, es decir, la suma de los argumentos dados (el número de argumentos puede ser cualquier número natural)?

¿Qué se debe saber antes de estudiar matemáticas discretas?

¿Cuáles son algunos problemas abiertos importantes o interesantes en la teoría de la codificación?

Cómo resolver el problema P versus NP

¿Dónde puedo obtener un código para la entrada y salida rápida de enteros, enteros largos largos, flotante, doble, caracteres y cadenas para C?

Cómo entender la pregunta para poder intentar resolverla

¿Cuáles son algunos métodos heurísticos en la factorización de números primos?

¿Cuál es el significado de la teoría de la complejidad del caso promedio?

¿Cuáles son las fórmulas matemáticas para expresiones informáticas como: x = x / 5?

¿La comunidad académica evita los intentos de resolver un problema NP-difícil en tiempo polinómico?

¿El aumento del nivel de las competiciones de matemáticas ha resultado en un aumento de las capacidades en las ciencias del mundo real?