¿Soy una mónada? ¿Somos una mónada? (Software y hardware)

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?

No estoy muy familiarizado con Haskell, pero la mónada de E / S y la idea de mónada de Leibniz parecen bastante alejadas en la medida en que una mónada de Leibniz no interactúa con su entorno, al menos no en la toma de entrada del entorno y luego hacer algo sentido.
Si toma en serio cualquier analogía, terminará siendo cualquier cosa, incluso una pregunta de intercambio de pila en sí misma :)
No estoy seguro de cuál es la definición correcta de software aquí, si quiere decir que la mónada de E/S lo separa del hardware. O de qué manera la entrada realmente se relaciona con el hardware: hay una relación si piensas en un usuario que presiona un botón numérico mientras ejecuta el programa, que ciertamente te concedo. El código en ejecución es hardware que funciona de acuerdo con las reglas del software. Yo diría que la mónada le permite encapsular un código en ejecución para que no se vea afectado por más entradas. ¿Es esto una cuestión de software versus hardware?
¿No está esto relacionado? "La teoría de Leibniz es mejor conocida como una solución al problema mente-cuerpo de cómo la mente puede interactuar con el cuerpo" en.wikipedia.org/wiki/Pre-establecido_armonía
@LayGonzález seguro que esa es la razón del nombre. A las personas que diseñan lenguajes informáticos y sus conceptos relacionados les suelen gustar mucho las metáforas profundas que bordean los juegos de palabras. Y este sería un ejemplo de ello. Las mónadas serían la única forma de interacción entre procesos independientes, así como la única forma de que un proceso afecte el mundo fuera de la computadora.

Respuestas (4)

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.

los pensamientos irradian calor. tiene un efecto en el aire circundante inmediato, lo que podría causar dilatación y aumento de la presión en la habitación, lo que podría ser el factor decisivo en la caída de una pieza de adorno muy muy inestable en el estante, si se le agregan algunas vibraciones de un vecino caminando por ejemplo. Podría decidir volver a colocarlo en su lugar y perder una llamada telefónica importante porque se alejó demasiado para recogerlo a tiempo...
No existe un aislamiento perfecto, pero este es un ejemplo excepcionalmente tonto. La cantidad de calor que irradia el cerebro tiene poco que ver con el pensamiento.
Bromas aparte, creo recordar haber leído en alguna parte que sí lo hace. Hay una variación de 20 vatios por encima de una línea de base de 20/30 vatios.

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 mes 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 aa mónada bes 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...

Eso depende.

Si piensas

  1. hay una clara distinción entre mente y cuerpo
  2. la mente es puramente matemática
  3. un ser humano se define como aquello que permite que la mente siga siendo puramente matemática mientras se conecta a un cuerpo

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:

  1. Argumentos contra el dualismo
  2. ¿Qué pasa con las emociones?
  3. ¿Seguramente un humano es más que esto? ¿No existe un humano también de su mente y cuerpo mismos?

Una analogía mejor

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 Worldes único, de modo que solo una función puede usarlo a la vez. De esa manera, solo Worldexistirá 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 -> Voidque muestra la cadena de entrada en la pantalla y no produce nada, uno podría escribir una función print:

print = (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 outputpodría verse como output :: String -> (*World -> (Void, *World)). Aquí, *Worldestá el mundo exterior único. outputtoma una cadena y produce una función de *Worldnada y una nueva *World: la función cambia el mundo . La printfunción se escribiría como

print = output "world!" (snd (output "Hello " world))

Aquí, sndproduce el segundo elemento de una tupla. Como el de más a la izquierda outputnecesita el *Worldque produce el de más a la derecha output, no puede ejecutarse antes que el de más a la derecha output. Por lo tanto, el programa siempre genera Hello 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.