En Haskell , un lenguaje de programación, el concepto de mónada de entrada/salida se usa para separar (¿o conectar? (¡unir!)) el software en ejecución de su interacción con el hardware.
Esto me hace preguntarme si es correcto pensar en mí como una mónada (software y hardware, mente y cuerpo). O tal vez, ¿estoy dentro de una mónada de E/S? ¿O somos todos, junto con el cosmos, una mónada?
Yo diría que hay una parte particular de ti que desparaleliza tu procesamiento y une tus referentes a lo externo.
Esa es la mónada, el envoltorio que te permite tener de forma segura referentes externos sobre los que puedes tener efectos predecibles y duraderos sin estar permanentemente atado a ellos o contenerlos.
Que no es todo de ti, mucho de ti tiene otros propósitos. Es solo la interfaz de la conciencia.
Entonces, la conciencia es la mónada, la mayor parte de su actividad cerebral es en gran medida un proceso puro. (La mayoría de los pensamientos solo tienen efectos dentro del cerebro y no en nada más, de la misma manera que un proceso puro solo afecta el estado del procesador, no el mundo exterior).
Entonces tú, como la aplicación de un proceso (algo) puro a través de una mónada, eres un proceso con efectos.
Una mónada es una construcción matemática. En términos generales, no es típico asumir que los humanos son construcciones matemáticas.
Sin embargo, puede ser válido argumentar que estás "bien modelado como mónada". Esto sería como decir que una gran cantidad de valor explicativo puede provenir de modelarse a uno mismo como una mónada.
Más tarde, si decides que estás "perfectamente modelado como una mónada", entonces entra en juego la siguiente capa de ontología, cuando te preguntas "si estoy perfectamente modelado como una mónada, ¿soy, de hecho, una mónada?"
Personalmente, encuentro que soy demasiado imperfecto para encajar en una construcción matemática tan clara como el cristal, por lo que no diría que soy una mónada. Tal vez, en un buen día, podrías modelarme como tal.
Depende de ti si eres lo suficientemente perfecto para ser una mónada.
Una mónada m
es una construcción para encapsular computación. Puedes pensar en una mónada como una caja con una función en ella. Vincular mónada a
a mónada b
es poner el cuadro B en el cuadro A. De esa manera, se asegura de que la función A se ejecute antes que la función B: B no se puede ejecutar antes porque necesita el resultado de A. De esta manera es posible controlar el orden de evaluación en una programación diferida idioma 1 .
En el caso de IO Monad, el propósito es interconectar el propio programa (que es puramente funcional) con el mundo exterior (que es impuro). Esto no es lo mismo que conectar software y hardware. El programa aún se ejecuta en el hardware (el procesador). Sin embargo, con IO Monad, una función pura puede tener efectos secundarios (por ejemplo, escribir en un archivo). Las mónadas en sí mismas son solo construcciones y pueden usarse para cualquier cosa, incluso para aritmética simple. Entonces, la comparación con un humano solo se puede hacer con la Mónada IO.
Lo que es importante es que con IO Monad de alguna manera separes los efectos secundarios de una función pura para que permanezca pura. ¿Eso se parece a un humano? Bien...
Si piensas
entonces sí, eres como la Mónada IO. Pero, existen razones válidas para no estar de acuerdo con ninguno de los tres puntos anteriores:
Si tuviera que simular humanos en un lenguaje de programación funcional (y de hecho lo hice, simulando un equipo de fútbol en Clean hace unos meses ), consideraría que un humano es una función que toma un mundo y produce un nuevo mundo: un humano tiene sentidos con los que observa el mundo, los procesa y de alguna manera cambia el mundo al actuar. Por lo tanto, podríamos escribir el tipo de un ser humano como Human :: World -> World
.
Ahora, es importante que no podamos escribir una función que aplique las acciones de dos humanos como
two_humans :: Human Human World -> (World, World)
two_humans h1 h2 world = (h1 world, h2 world)
Después de aplicar esta función, tenemos dos mundos, que nunca pueden ser el caso. El lenguaje de programación funcional puro y perezoso Clean utiliza tipos únicos para evitar este problema. Lo que haces es decir que World
es único, de modo que solo una función puede usarlo a la vez. De esa manera, solo World
existirá uno en el programa.
notas al pie
1: ¿Qué es el orden de evaluación de control?
En un lenguaje de programación perezoso, las funciones se ejecutan cuando se necesita el resultado, en lugar de cuando el procesador llega al punto donde se escribe la función. Supongamos que hay una función simple
output :: String -> Void
que muestra la cadena de entrada en la pantalla y no produce nada, uno podría escribir una funciónprint = (output "Hello ", output "world!")
Cuando se ejecuta, esto puede mostrar ambos
Hello world!
y , porque el orden en que se ejecutan las funciones no está definido.world!Hello
Una función monádica
output
podría verse comooutput :: String -> (*World -> (Void, *World))
. Aquí,*World
está el mundo exterior único.output
toma una cadena y produce una función de*World
nada y una nueva*World
: la función cambia el mundo . Laprint = output "world!" (snd (output "Hello " world))
Aquí,
snd
produce el segundo elemento de una tupla. Como el de más a la izquierdaoutput
necesita el*World
que produce el de más a la derechaoutput
, no puede ejecutarse antes que el de más a la derechaoutput
. Por lo tanto, el programa siempre generaHello world!
.Tenga en cuenta que esta sintaxis es confusa (es de derecha a izquierda) y requiere mucho tipeo. Haskell tiene la función de enlace (
>>=
) para unir fácilmente dos mónadas.
Una mónada es un concepto en la teoría de categorías, una teoría en matemáticas; se llama así porque es un concepto simple , que se deriva de la noción de un monoide, el dispositivo algebraico más (útilmente) más simple posible.
Esto tiene muy poco que ver con los humanos o, de hecho, con el cosmos.
Lo que lo conecta con la noción de Liebniz de una mónada es esta noción de simplicidad , y muy poco más, pero esto tiene mucho que ver con los humanos, el cosmos y Dios; su texto, la monadología , trata de ellos.
Allí, las mónadas son todas sustancias simples : no se pueden descomponer más; componen el mundo o cosmos: almas humanas, átomos de materia y espacio-tiempo, y Dios.
No interactúan directamente, sino que actúan a través de una armonía establecida por Dios.
Esto puede compararse útilmente con una cosmología que nos ha llegado desde la Antigüedad, y posiblemente una inspiración para ella: esta es la teoría de los átomos de Lucrecio. Para la tesis tres en la Monadología afirma:
Algo que no tiene partes no puede extenderse, no puede tener forma y no puede dividirse. Así que las mónadas son los verdaderos átomos de la naturaleza, los elementos de los que está hecho todo.
La diferencia más notable entre ellos es que la divinidad lucreciana está más allá de este mundo, inmutable y permanente; no menciona ninguna relación entre ellos; y que la mente de los humanos está hecha de átomos finísimos; mientras que Liebniz reemplaza la mente por el alma (es un filósofo cristiano); y éste es un solo átomo, o mónada, en su terminología.
virmaior
Ankur
Nikolaj-K
lay gonzalez
usuario9166