The Functional Programming Collection
Aquellos que hasta ahora me han conocido y han llegado a hablar conmigo sobre temas de programación, probablemente están al tanto de mi fanatismo por el paradigma funcional, especialmente el lenguaje de programación Haskell.
Por lo tanto, sin duda alguna mi blog no se sentía completo sin antes tener un espacio para evangelización al culto del cálculo lambda.
Estos son algunos de los recursos que he revisado y en algún punto me han servido para entender (si es que puedo decir que lo entiendo) la programación funcional y declarativa, y algunos incluso siguen siendo contenido de referencia que utilizo para enseñar a otros.
Notarán que hay una cantidad importante de contenido relacionado a Haskell, no por excluir a otros lenguajes, sino porque al momento de escribir esto me encuentro en mi fase de relación (discutiblemente tóxica) con este lenguaje. Probablemente más adelante añada contenido particular a otros lenguajes, y de haber comenzado este registro con anterioridad, probablemente ahora ya estaría plagado de contenido sobre Elixir (tal vez algún día vuelva a buscar algo del contenido que utilicé en mi época de amante de Elixir).
Tabla de contenidos.
Cálculo λ.
- What functions can System F not compute?: Sobre las restricciones del sistema F y el cálculo lambda de tipado simple.
- Introduction to Lambda Calculus: Una introducción formal y detallada al cálculo lambda simple y tipado.
Sistemas de tipos.
- So you still don’t understant Hindley-Milner?: Una serie de 3 posts en donde el autor explica el algoritmo Hindley-Milner para inferencia de tipos.
- Proposition as Types by Philip Wadler: Una charla sobre el isomorfismo Curry-Howard, historia, lógica, computación, y más.
- Proposition as Types for beginners in Haskell: Cómo podemos utilizar el sistema de tipos de Haskell para hacer demostraciones matemáticas.
Diseño de lenguajes.
- Namespaced De Brujin indices: Un método interesante de solucionar problemas con el alcance de variables en declaración de funciones en lenguajes interpretados.
- Write you a Haskell: Una excelente para entender Haskell y la implementación de un compilador para el lenguaje. (Disclaimer: Aún no está completo).
Teoría de categorías.
Aunque la teoría de categorías es una rama matemática, los siguientes son recursos relacionados a esta rama, pero desde la implementación que proveen algunos lenguajes de programación (en particular Haskell).
- Counterexamples of Type Classes: Por qué algunos semigrupos no son monoides, y otras cosas.
- Please Don’t Learn Category Theory to Learn Haskell: Para los traumados como yo que comenzamos una segunda carrera en matemáticas solo para entender Haskell.
- Category Theory: Grabaciones del curso de teoría de categorías impartido por Bartosz Milewski.
Haskell
Estoy consciente de que toda la colección ha estado plagado de referencias a Haskell, pero los siguientes son recursos cuyo propósito es exclusivamente entender Haskell y no es necesariamente aplicable a otros lenguajes (como todo lo anterior).
- What I Wish I Knew When Learning Haskell: Un poco de todo. Desde lo básico hasta lo más avanzado.
- Learn you a Haskell for great good!: No es mi recurso favorito, pero una lista sobre recursos de Haskell nunca está completa si no se encuentra esta página.
- Functors, Applicatives, and Monads in pictures: Una muy buena analogía para entender algunas álgebras en Haskell.
- Reader and Writer Monads: El autor nos ayuda a comprender cómo funcionan las mónadas Reader y Writer, una solución pura al concepto de estado.
- You Could Have Invented Monads! (And Maybe You Already Have.): La única forma de entender mónadas es construyendo mónadas.
- Deriving the Reader monad from first principles: Una excelente guía para construir la mónadas Reader a mano.
- Unraveling the mystery of the IO monad: `IO` es probablemente el tipo de dato más incomprendido entre los desarrolladores de Haskell, al mismo tiempo que es probablemente la mónada más utilizada.
- Crash Course to Applicative Syntax: Algunos casos de uso interesantes para los Aplicativos.
- Haskell for Imperative Programmers: Una excelente serie de videos para entender todo sobre Haskell.
Random
- typo: Un lenguaje de programación que corre sobre el sistema de tipos de Haskell.