¿Matemáticas necesitaba entender la teoría detrás del sistema de tipos de Haskell?

9

Recientemente, me he interesado profundamente en Haskell.

Mientras intento aprender nuevos conceptos (por ejemplo, la palabra clave forall y la mónada ST ) y el sistema de tipos de Haskell en general, continuamente me encuentro con conceptos de teoría de categorías y cálculo lambda . Entonces, me pregunto:

  1. ¿Qué otras ramas de las matemáticas son importantes para una sólida comprensión del sistema de tipos de Haskell?

  2. ¿Puedo renunciar a un estudio riguroso de estas matemáticas y, en cambio, centrarme en ciertos conceptos pertinentes? (p. ej. cuantificadores en cálculo lambda). Si es así, ¿qué conceptos son esenciales?

Espero aprender Tipos y lenguajes de programación pronto, sin embargo, sugiera cualquier recurso de lectura alternativo que considere apropiado.

Robar
fuente
44
Lo de la teoría de categorías no es esencial para conocer y trabajar con Haskell, pero puede ayudar con algunos conceptos fundamentales. La única rama real de las matemáticas para entender estas cosas es la teoría de la categoría, no solo está arraigada allí, sino que allí encontrarás poca dependencia de otras matemáticas, es un área muy aislada de esa manera. Elija el cálculo Lambda y estudie los diferentes sistemas de tipos asociados con diferentes variantes lambda, y aparte de eso, lea esta respuesta SO y lea sobre la teoría de categorías.
Jimmy Hoffa
3
No me atraparía tanto con el dominio del sistema de tipos subyacente. Al menos no dejes que no saberlo todo te impida completar un par de proyectos. Solo completar algunos proyectos simples en Haskell me ha permitido ver la belleza matemática detrás de esto y me ha llevado a comprenderlo.
ChaosPandion
2
@ChaosPandion Estoy de acuerdo con ese punto de vista, pero he estado trabajando en un proyecto que puede requerir escribir código en la STmónada. Es complicado escribir código que se compilará cuando no entiendo todas las firmas de tipo relevantes, por lo que sentí que sería prudente mejorar mi comprensión del sistema de tipos.
Rob
3
@robjb: ciertamente estoy de acuerdo con usted en que una comprensión más profunda es prudente. Honestamente, mi comentario se dirigió más a la audiencia general que podría encontrar a Haskell demasiado intimidante para intentarlo.
ChaosPandion

Respuestas:

11

No, no necesita recoger un libro sobre teoría de categorías para comprender a Haskell.

He estado usando Haskell durante algunos años, y aprendí algo de teoría de categorías por curiosidad, realmente no es necesario. Por un lado, es genial ver cómo todas estas abstracciones encajan en "el panorama general", pero no dije "Oh, Dios mío, solo necesito hacer de esto un profunctor de la Maybecategoría a []s y luego puedo guardar el ¡princesa!".

Ahora, dependiendo de lo que esté haciendo con la teoría del tipo Haskell, está en la cerca.

Si solo está aprendiendo haskell , no intente comprender todos los matices del sistema de tipos . Por favor, no, es como tratar de aprender la metaprogramación de plantillas C ++ primero. Los tipos elegantes son herramientas excelentes, pero tener una buena comprensión de la programación funcional es mejor que comprender el polimorfismo impredecible.

Ahora, digamos que después de un año o dos de Haskell, está buscando comprender cada parte sutil de cómo funciona el sistema de tipos de Haskell, entonces sí, alguna teoría de tipos podría ser útil.

Le ayudará a comprender parte de la lógica detrás de cómo funcionan las cosas, además es francamente una rama realmente genial de la OMI de informática que vale la pena mirar. Puede elegir las partes que le interesan y aún así aprender una cantidad decente.

Para Haskell, mirando STLC, sistemas de tipo HM (Sistema F) y quizás el cubo lambda (Haskell es System Fw iirc) y tipos iso-recursivos. Los lenguajes de tipos y programación son un gran recurso para comenzar y cubren todo esto y mucho más.

Si realmente quieres beber el refresco y descubrir que eres un teórico del tipo incipiente, ve a Agda o Coq. Estos presentan "tipos dependientes", un paso más adelante en el cubo lambda que Haskell. Los tipos dependientes permiten que los tipos dependan de los términos. Esto significa que los tipos son lo suficientemente potentes como para probar teoremas. Para los curiosos, googlear "curry howard isomorphism" debería traer algunos resultados interesantes.

Daniel Gratzer
fuente
Una breve descripción de Agda y Coq sería útil.
ChaosPandion
@ChaosPandion Actualizado
Daniel Gratzer
Eso parece bueno Supuse que decir los nombres no sería suficiente para despertar los intereses de muchas personas.
ChaosPandion