1. Introdução ao paradigma funcional de programação.
2. Conceitos fundamentais da programação em Haskell.
(a) Noção de programa e a sua execução.
(b) Expressões e valores.
(c) Redução.
(d) Tipos.
(e) Definições.
(f) Estruturas condicionais e concordância de padrões.
(g) Definições locais.
(h) Módulos.
3. Funções.
(a) Funções pré-definidas sobre tipos básicos.
(b) Funções não recursivas.
(c) Funções recursivas.
(d) Parâmetros de acumulação.
(e) Polimorfismo.
(f) Funções anónimas.
(g) Funções de ordem superior.
4. Listas.
(a) O conceito de lista.
(b) Listas por compreensão.
(c) Listas infinitas.
(d) Operações básicas sobre listas.
(e) As funções map e filter.
(f) As funções foldr e foldl.
(g) Outras funções de ordem superior.
(h) Funções para manipulação de texto.
(i) Algoritmos de ordenação.
i. Insertion sort.
ii. Merge sort.
iii. Quick sort.
5. Tipos, classes e polimorfismo.
(a) Definição de novos tipos de dados.
(b) Classes e instâncias.
(c) Classes derivadas.
(d) Hierarquia de classes.
(e) Algumas classes pré-definidas.
(f) Polimorfismo e sobrecarga.
(g) Classes de construtores.
6. Árvores.
(a) Árvores binárias.
(b) Árvores binárias de procura.
(c) Árvores generalizadas.
7. Input/Output
8. Tipos Abstractos de Dados
(a) O conceito de tipo abstracto de dados e a sua implementação em Haskell.
(b) Alguns exemplos: conjuntos, tabelas, pilhas e filas de espera.