Después de aprender Haskell y otros lenguajes FP no tan puros, decidí leer sobre teoría de categorías. Después de obtener una buena comprensión de la teoría de la categoría, comencé a pensar en cómo los conceptos de la teoría de la categoría se pueden usar para pensar en el diseño de programas, pero no importa cuánto lo intente, parece que este no es el camino a seguir.
Después de pasar muchos intentos fallidos de relacionar la teoría de categorías con el diseño de programas , llegué a la conclusión de que:
- La teoría de categorías es útil al diseñar un lenguaje de programación .
- La teoría de categorías no es algo que se usa al diseñar programas (incluso cuando se usa un lenguaje diseñado en base a principios de categoría). Por ejemplo: al programar en Haskell, utilizará tipos, constructor de tipos, funciones, funciones de orden superior, etc. para diseñar su programa, no conceptos de teoría de categorías.
En resumen, tenemos el siguiente sistema de capas (el orden es de menor a mayor):
Teoría de la categoría -> Lenguaje de programación -> Programa
En una capa particular, utiliza los conceptos de la capa subyacente inmediata .
¿Es correcto este entendimiento? Si no es así, y cree que al diseñar programas podemos usar directamente los conceptos de teoría de categorías, consulte algunos artículos o publicaciones de blog donde se está demostrando.
NOTA: Al diseñar programas me refiero a diseñar programas basados en diferentes conceptos, como concurrencia, paralelismo, reactividad, transmisión de mensajes, etc.
Respuestas:
Bueno, eso, por supuesto, depende del tipo de programa que intente diseñar.
Si está diseñando un programa de contabilidad para la tienda de chocolates de su tía, dudo mucho que la teoría de categorías le sea de mucha utilidad.
Pero, por supuesto, hay situaciones en las que la teoría de categorías es enormemente útil en el diseño de programas (con lo que también me refiero a estructuras de datos, bibliotecas, etc.). Tales situaciones ocurren principalmente cuando los programas involucrados son de naturaleza matemática.
Si desea escribir programas que computen con números reales exactos y otras estructuras que ocurren en el análisis matemático, la primera pregunta que debe responder es qué significa implementar correctamente un objeto matemático complicado (como una función diferenciable, una variedad, etc. ) Aquí ayuda mucho saber algo de teoría y lógica de categorías, porque le brindan una forma sistemática de traducir definiciones de estructuras matemáticas a especificaciones e implementaciones de estructuras de datos correspondientes. La palabra de moda que debe buscar es la teoría de la realizabilidad . Pero este es solo un ejemplo.
La mejor manera de ver cómo la teoría de categorías es útil es mirar programas escritos por personas que conocen mucha teoría de categorías (y matemáticas en general). Un ejemplo obvio de esto es Martín Escardó y sus funciones imposibles, por ejemplo:
Puede quejarse de que esto no es solo teoría de categorías, sino también lógica y topología. Tales quejas estarían severamente equivocadas. La mejor teoría de categorías siempre se mezcla con otras cosas.
Por último, recomendaría no sacar grandes conclusiones sobre la naturaleza de las cosas basadas en un poco de lectura autoasignada.
fuente
La gente solía usar CT para describir los tipos de datos.
No estoy completamente seguro de que alguien le preste más atención a esto. Creo que esto , y los enlaces allí, lo explicarían con más detalle.
fuente