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:
¿Qué otras ramas de las matemáticas son importantes para una sólida comprensión del sistema de tipos de Haskell?
¿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.
ST
mó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.Respuestas:
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
Maybe
categorí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.
fuente