Aula 22 (T)
Exemplo de implementação do conceito de ordem parcial através da definição de uma nova classe. Definição do tipo conjunto como instância desta classe.
Records em Haskell. Exemplos de utilização.
Aula 12 (PL)
Avaliação do 2º trabalho prático.
Aula 12 (TP)
Avaliação do 2º trabalho prático.
Aula 21 (T)
O tipo abstracto Queue, e sua implementação em Haskell.
Exemplos com de utilização dos tipos abstractos Stack e Queue.
Os tipos abstractos Set e Table. Exemplos de diferentes implementações para estes tipos, e de sua utilização.
Aula 11 (TP)
Resolução da ficha de exercícios sobre o jogo do Euromilhões.

Aula 20 (T)
Inquéritos para avaliação do ensino ministrado.
Tipos concretos de dados versos tipos abstractos de dados.
Implementação de tipos abstractos de dados em Haskell usando módulos.
O tipo abstracto Stack: exemplos de diferentes implementações deste tipo, e da sua utilização.
Aula 11 (PL)
Continuação da resolução de exercícios da ficha de trabalho 6.
Aula 19 (T)
Módulos: os diferentes formas de exportação e importação de entidades; exemplos.
Compilação de programas Haskell.
Aula 18 (T)
Funções de input/output do Prelude e do módulo IO.
Manipulação de ficheiros de texto. Exemplos de como carregar/guardar a informação de/para ficheiro. Vários exemplos.
O construtor de tipos Maybe como instância da classe Monad. Exemplo de utilização.
Aula 10 (PL)
Resolução da 1ª parte da ficha de trabalho 6.
Aula 10 (TP)
Resolução de exercícios sobre classes.
Exercício sobre a etiquetagem dos nodos de uma árvore com um nº que representa a ordem porque o nodo é visitado numa travessisa inorder.
Aula 17 (T)
Definição de uma classe para o constructor de tipos função finita e exemplo de uma instância desta classe.
Introdução ao conceito de mónade e apresentação da classe Monad.
O mónade IO; a notação do; funções IO do Prelude. Vários exemplos de funções com acções de input/output.
Aula 16 (T)
A classe Read e exemplos da sua utilização. Declaração de tipos polimórficos com restrições nos parâmetros.
A hierarquia de classes pré-definidas do Haskell. Definição de novas classes e exemplos da sua utilização.
Classes de constructores de tipos. A classe Functor e exemplos de instâncias desta classe.
Aula 9 (PL)
Resolução de exercícios da ficha de trabalho 5.
Aula 9 (TP)
Resolução de exercícos sobre árvores. Remoção em árvores binárias de procura. O conceito de árvore balanceada. Criação de uma árvore de procura balanceada a partir de uma lista ordenada.
Aula 15 (T)
Extensão de classes. Os conceitos de herança e herança múltipla.
Apresentação de algumas classes pré-definidas do Haskell: Ord, Show, Num e Enum. Declaração do tipo Nat como
instância de cada uma destas classes.
Aula 14 (T)
Polimorfismo paramétrico e polimorfismo ad hoc (sobrecarga de operadores).
Tipos qualificados. Os conceitos de classe e de instância de classe.
O conceito de tipo principal. Exemplos de classes. Definições por omissão de métodos.
A classe Eq: exemplos de instâncias, instâncias com restrições e instâncias derivadas.
Aula 8 (PL)
Continuação da resolução de exercícios da ficha de trabalho 4.
Aula 8 (TP)
Resolução de exercícios sobre árvores binárias de procura, da ficha de trabalho 4.
Aula 14 (T)
Árvores binárias de procura. Funções de inserção e pesquisa em árvores binárias de procura.
Definição e análise de duas definições distintas da função de transformação uma lista numa árvore: usando recursividade primitiva, e utilizando um parâmetro de acumulação.
Aula 13 (T)
O tipo de dados árvore binária. Diversas funções recursivas sobre árvores binárias.
Travessias de árvores binárias: preorder, inorder e postorder.
Aula 7 (PL)
Resolução da 1ª parte da ficha de trabalho 4.
Aula 7 (TP)
Resolução de alguns exercícios do início da ficha de trabalho 4.
Aula 12 (T)
Tipos algébricos: exemplos tipos recursivos e polimórficos.
Definição do tipo dos números naturais e de funções que manipulam este tipo de dados. Análise de casos (expressões case).
O tipo (Maybe a) e exemplos da sua utilização.
Aula 11 (T)
Definição de novos tipos de dados. Tipos algébricos: exemplos de tipos enumerados e de co-produtos.
Aula 6 (PL)
Continuação da resolução de exercícios da ficha de trabalho 3.
Aula 6 (TP)
Resolução de alguns exercícios do final da ficha de trabalho 3.
Aula 10 (T)
Funções de ordem superior: a função foldr e a composição de funções.
Algoritmos de ordenação de listas: insertion sort, quick sort e merge sort. Diversas implementações em Haskell destes algoritmos.
Aula 9 (T)
Definição em Haskell de listas por compreensão.
Funções anónimas.
Várias implementações de uma função que calcula os divisores de um número.
Aula 5 (PL)
Entrega da ficha 2. Início da resolução da ficha de trabalho 3.
Aula 5 (TP)
Resolução de alguns exercícios da ficha 3 (tarefa 9).
Aula 8 (T)
Funções de ordem superior. As funções map e filter.
A notação @.
Aula 7 (T)
Padrões sobre números naturais.
Definição e análise de diferentes versões das funções take e drop.
Aula 4 (PL)
Continuação da resolução de exercícios da ficha de trabalho 2.
Aula 4 (TP)
Resolução de exercícios sobre a definição de funções sobre listas, para um problema de modelação de uma viagem, contituída por várias etapas, por uma lista de pares de horas (de partida e de chegada).
Aula 6 (T)
Dispensa de aulas.
Aula 3 (PL)
Início da resolução da ficha 2: Concordância de Padrões em Haskell; definição multi-clausal de funções; definições locais. 
Aula 3 (TP)
Discussão e resolução de exercícios sobre a definição de funções de listas, usando recursividade estrutural. 
Aula 5 (T)
Redução: lazy evaluation versus eager evaluation.
Definições multi-clausais de funções. Funções totais e funções parciais.
Tipos sinónimos. Definições locais. Operadores infixos.
Funções com guardas.
Aula 4 (T)
Definição de funções e a sua invocação: curried versus uncurried.
O tipo polimórfico [a] e o tipo String. Algumas funções pré-definidas sobre estes tipos. Noção de padrão e concordância de padrões. Equações como
regras de redução.
Aula 2 (TP)
Discussão: expressões e tipos em Haskell; definição de funções.
Aula 2 (PL)
Continuação da resolução da Ficha 1. Funções: tipos e definição. Importação de módulos. Introdução às funções recursivas.
Aula 3 (T)
Inferência de tipos: noção de tipo mais geral e de instância de um tipo.
Operadores básicos do Haskell: lógicos, numéricos, relacionais e
condicionais. A noção de módulo. Introdução de comentários em Haskell.
Aula 1 (TP)
Apresentação.
Aula 1 (PL)
Distribuição de logins e passwords. Resolução da Ficha 0: introdução ao ambiente de trabalho Mac OSX; utilização de um editor de texto, “shell” do sistema, e interpretador GHCI de Haskell. Início da resolução da Ficha 1: valores, expressões, e tipos em Haskell.
Aula 2 (T)
Conceitos fundamentais da programação em Haskell: valores e expressões; tipos básicos e tipos compostos.
Definições de funções simples. Equações como regras de cálculo. Preservação de tipos.
Inferência de tipos: noção de variável de tipo; funções polimórficas.
Aula 1 (T)
Apresentação. O paradigma funcional de programação.
Aula 7 (T)
Os construtores do tipo de dados [a].
Padrões do tipo lista. Definição de funções recursivas sobre listas: diversos exemplos.