Teorías: Clase inaugural | Conceptos preliminares | Modelo funcional: valores
y expresiones | Modelo funcional: Sistemas de tipos | Modelo funcional: Currificación |
Modelo funcional: Reducción | Técnicas formales: Propiedades y demostraciones | Técnicas
formales: Inducción/Recursión | Aplicación de conceptos: Listas | Tipos de datos: Tipos
algebraicos | Tipos de datos: Tipos abstractos | Tipos de datos: Tipos recursivos |
Tipos de datos: Esquemas de recursión | Tipos de datos: Esquemas en árboles | Evaluación
Lazy | Recursión de cola y Teoremas de dualidad | Derivación de programas | Técnicas de
diseño | Lambda Cálculo: Definición-Sustitución | Lambda Cálculo: Semántica por
equivalencias | Lambda Cálculo: Semántica operacional | Lambda Cálculo: Programación ||
Prácticas: Práctica 1. Introducción a la sintaxis de Haskell y al ambiente Hugs |
Práctica 2. Expresiones y valores. Tipos. Notación Lambda | Práctica 3. Currificación.
Alto orden. Reducción. Ordenes de evaluación | Práctica 4. Demostraciones. Propiedades
de programas: terminación, equivalencia. Inducción. Recursión | Práctica 5. Tipos
algebraicos. Pattern matching. Listas | Práctica 6. Sinónimos de tipos. Tipos
algebraicos recursivos. Árboles | Práctica 7. Funciones de alto orden sobre listas |
Práctica 8. Tipos abstractos de datos y módulos | Práctica 9. Patrones genéricos de
recursión. Funciones sobre árboles | Práctica 10. Lazy evaluation. Estructuras
infinitas. Elementos parciales. Principios de dualidad | Práctica 11. Derivación y
síntesis de programas. Combinadores | Práctica 13. Práctica integradora.