Unidade 2 — Haskell Avançado e Qualidade de Código (20h)¶
Identificação¶
| Unidade | 2 de 3 |
| Carga horária | 20 horas (10 aulas de 2h) |
| Pré-requisitos | Unidade 1 concluída (Haskell básico: funções, listas, alta ordem) |
| Linguagem | Haskell (projetos com Stack, QuickCheck, HSpec) |
Objetivos de aprendizagem¶
Ao final desta unidade, o estudante deverá ser capaz de:
- Definir tipos algébricos de dados (ADTs), tipos recursivos e instâncias de classes de tipos próprias.
- Construir programas interativos compreendendo a separação entre código puro e ações
IO. - Estruturar um projeto Haskell moderno com Stack, organizando biblioteca, executável e suíte de testes.
- Implementar uma biblioteca completa de serialização JSON, aplicando ADTs e pretty-printing (adaptado de Real World Haskell, cap. 5).
- Garantir a qualidade do código com testes baseados em propriedades usando QuickCheck (adaptado de Real World Haskell, cap. 11).
Cronograma¶
| Aula | CH | Conteúdo | Capítulo |
|---|---|---|---|
| 1 | 2h | Declaração de tipos: type, data, tipos parametrizados e recursivos |
Declarando Custom Types |
| 2 | 2h | Classes de tipos próprias, instâncias e derivação | Declarando Custom Types |
| 3 | 2h | Programas interativos: a monad IO, do-notation, entrada e saída |
Programas Interativos (IO) |
| 4 | 2h | Prática dirigida: exercícios avançados com ADTs e IO | Exercícios Avançados |
| 5 | 2h | Haskell moderno: Stack, package.yaml, módulos e dependências | Projetos Modernos com Stack |
| 6 | 2h | Biblioteca JSON — parte 1: modelagem do tipo JValue e serialização |
Escrevendo a Biblioteca JSON |
| 7 | 2h | Biblioteca JSON — parte 2: pretty-printing e refinamento da API | Escrevendo a Biblioteca JSON |
| 8 | 2h | Testes baseados em propriedades com QuickCheck e HSpec | Testes com QuickCheck |
| 9 | 2h | Laboratório orientado: desenvolvimento do trabalho prático | Trabalho Prático |
| 10 | 2h | Entrega, apresentação e defesa dos trabalhos | Trabalho Prático |
Metodologia¶
A unidade é orientada a projeto: os conceitos das aulas 1–5 convergem para a construção incremental da biblioteca JSON (aulas 6–8), que é também o objeto da avaliação. As aulas 4, 9 e 10 são realizadas em laboratório.
Os capítulos 5 e 6 deste material apresentam os conceitos e as decisões de projeto; o desenvolvimento passo a passo é guiado pelo tutorial Construindo e Testando uma Biblioteca Haskell: JSON, Pretty Printing e QuickCheck, no blog do LambdaGEO.
Avaliação¶
- Trabalho prático (100%) — desenvolvimento da biblioteca JSON estruturada com Stack e integrada com uma suíte de testes QuickCheck, conforme especificado no capítulo Trabalho Prático. A nota considera: corretude e completude da biblioteca, qualidade e cobertura das propriedades testadas, organização do projeto e defesa individual na aula 10.
Bibliografia da unidade¶
- O'SULLIVAN, Bryan; STEWART, Don; GOERZEN, John. Real World Haskell — capítulos 5 e 11 (código modernizado para os padrões atuais do GHC).
- LIPOVAČA, Miran. Learn You a Haskell for Great Good! — capítulos 7 a 9.