En la programación funcional, efectos secundarios son un problema común (tratar con el mundo exterior). En matemáticas, las funciones suelen considerarse "puras". Elm es un lenguaje de programación que maneja los efectos secundarios para que parezca que estás en un entorno funcional puro, protegiéndote de las impurezas. Haskell maneja los efectos secundarios usando mónadas (no tengo mucha experiencia con Haskell).
- Efectos secundarios en el olmo (Documentación de introducción)
- ¿Por qué los efectos secundarios se modelan como mónadas en Haskell? (StackOverflow)
- Entender los efectos secundarios del olmo (Reddit)
- https://github.com/CoqHott/coq-effects (Creo que se trata de la biblioteca Coq para efectos algebraicos)
Lo que me pregunto es, una breve introducción al concepto de efectos secundarios desde un punto de vista algebraico. Algo que le permita a uno entender:
- Cómo se pueden contabilizar cosas como los errores/excepciones .
- Cómo se pueden explicar los cambios desconocidos en el estado del mundo exterior . (Como hacer una consulta de búsqueda en el navegador, modifica todo tipo de cosas).
Así, por ejemplo, digamos que tienes una función que devuelve un valor booleano:
$$ f : X \rightarrow B $$
donde $X = \{a, b, c\}$ y $B = \{1, 0\}$ .
Pero digamos que la función hace una petición HTTP y por lo tanto modifica el mundo externo, me pregunto cómo se contabilizaría eso en la ecuación para hacer la función "pura" de nuevo. Me pregunto si es tan simple como:
$$ f(w): X \rightarrow B $$
donde $w$ es el mundo exterior.
O tal vez hay más para que siga junto con el material en los campos efectos algebraicos / computacionales.
El segundo caso es la gestión de errores. Puede que la función tenga ocasionalmente un error. Así que me pregunto cómo se modelaría matemáticamente según esta área de trabajo.
$$ f(w) : X \rightarrow B \lor e $$
donde $e \in E$ es un error/excepción.
Para alguien con interés en entender los efectos algebraicos / mónadas, pero con poca o ninguna experiencia previa, cómo ir a modelarlos matemáticamente. Específicamente, cómo dar cuenta de los cambios de estado del mundo (conocidos o desconocidos) y los errores o comportamientos inesperados, utilizando la notación matemática.
La lectura de un documento como Lambda-cálculo computacional y mónadas (1988) está un poco por encima de mi cabeza. Otros documentos como Efectos algebraicos para la programación funcional simplemente salta directamente al código fuente de programación y se salta las matemáticas.