Introdução ao paradigma funcional de programação.

Conceitos fundamentais da programação em Haskell.
Noção de programa e a sua execução.
Expressões e valores.
Redução.
Tipos.
Definições.
Estruturas condicionais e concordância de padrões.
Definições locais.
Módulos.

Funções.
Funções pré-definidas sobre tipos básicos.
Funções não recursivas.
Funções recursivas.
Parâmetros de acumulação.
Polimorfismo.
Funções anónimas.
Funções de ordem superior.

Listas.
O conceito de lista.
Listas por compreensão.
Listas infinitas.
Operações básicas sobre listas.
As funções
map e filter.
As funções
foldr e foldl.
Outras funções de ordem superior.
Funções para manipulação de texto.
Algoritmos de ordenação:
insertion sort, merge sort, quick sort.

Tipos, classes e polimorfismo.
Definição de novos tipos de dados.
Classes e instâncias.
Classes derivadas.
Hierarquia de classes.
Algumas classes pré-definidas.
Polimorfismo e sobrecarga.
Classes de construtores.

Árvores.
Árvores binárias.
Árvores binárias de procura.
Árvores generalizadas.

Monades.
Noção de monade e sua definição.
O monade
IO.
O monade
Maybe.
Outros monades.

Tipos Abstractos de Dados
O conceito de tipo abstracto de dados e a sua implementação em Haskell.
Alguns exemplos: conjuntos, tabelas, pilhas e filas de espera.