*Você terá acesso às futuras atualizações do livro.

Prefácio

Haskell é uma linguagem de programação que traz novas formas de escrever programas corretos, eficientes e fáceis de manter. Com um modelo mental novo e uma caixa de ferramentas de programação extremamente moderna, essa linguagem pura e funcional nos dá insights valiosos para a construção de aplicações, mesmo quando precisamos aplicar esses insights em outras tecnologias e contextos.

Este livro foi escrito como uma introdução à linguagem Haskell para leitores familiarizados com ao menos uma linguagem de programação imperativa e dispostos a dedicar tempo para entender o que a programação puramente funcional tem a nos oferecer. Interessante e divertida, a linguagem é única por ser funcional, pura, estaticamente tipada, com avaliação preguiçosa por padrão e versões compiladas e interpretadas.

Com a crescente necessidade da indústria de escrever software altamente concorrente e paralelo, e capaz de ser executado na nuvem — software que precisa, sem grandes mudanças, suportar um ou N contextos de execução paralelos para escalar —, o modelo de programação sem o uso implícito de estado está em alta. Esse modelo, aqui tomando a forma de programação funcional ou declarativa, nos incentiva a modularizar as menores unidades possíveis da computação: funções. Usando a composição de declarações do que uma computação é, em vez de sequências de instruções de como uma computação ocorre, quebramos problemas em partes mais determinísticas. Assim, em vários casos, ganhamos suporte ao paralelismo e à concorrência de graça.

Além disso, nossos programas são cada vez maiores e mais complexos, e o trabalho de manutenção de software é cada vez maior e mais suscetível a falhas humanas. Por ser puro e estaticamente tipado, Haskell nos permite estabelecer garantias teóricas (a partir de provas e/ou modelos matemáticos expressos no código, bem como de propriedades de como expressões são avaliadas) e estáticas (a partir de mais metadados em seu rico sistema de tipos, programas finais sem casos não tratados).

Haskell é muito usado em pesquisa em linguagens de programação e tem um dos sistemas de tipos mais avançados disponíveis. A promessa é a de entregar programas sólidos mais rapidamente ao mercado, mesmo que um primeiro protótipo demore mais a ser escrito. O professor Alexandre convida-os a descobrir a sintaxe da linguagem Haskell, um pouco do ethos da programação funcional e alguns dos conceitos formais baseados na teoria das categorias, que proporcionam essas garantias, possibilidades e permeiam essa tecnologia. E ele faz isso com a iniciativa improvável e bem-sucedida de dois anos de aulas na FATEC-RL, ensinando seus alunos a beleza e a aplicação do paradigma puramente funcional e do Haskell.

Este livro é um primeiro pé em um longo caminho, no qual eu ainda tenho muito a percorrer; uma nova empreitada na literatura de linguagens de programação brasileira que espero ser tão útil para vocês quanto é animadora para mim.

Pedro Tacla Yamada — colaborador na HaskellBR, desenvolvedor e consultor na Beijaflor Software.

Introdução

Este livro destina-se a alunos(as) interessados(as) em aprender sobre este paradigma, que vem sendo cada vez mais adotado pelo mercado. Eu geralmente não recomendo um curso específico como pré-requisito, porém um semestre de lógica de programação e estruturas de dados não machuca e serve para entender um ou dois exemplos do livro. Um(a) aluno(a) que tem facilidade com matemática e paixão pelo assunto consegue seguir o livro sem ter feito um curso formal nos assuntos indicados também.

O livro constrói o conhecimento na linguagem Haskell, começando do zero, desde a sua instalação até o conceito de e a construção de uma aplicação web de verdade. Ele possui onze capítulos, um apêndice e referências, e foi escrito com base nas notas de aula do meu curso de Programação Funcional, na Faculdade de Tecnologia da Baixada Santista Rubens Lara (FATEC-RL). Depois de quase dois anos ministrando esta disciplina e tendo notado a dificuldade dos alunos em encontrar material em nossa língua materna, eis que surgiu a ideia do presente trabalho.

O primeiro capítulo aborda questões gerais da linguagem e do paradigma. No segundo, vemos a instalação do ambiente, alguns exemplos preliminares, manipulação de listas e tuplas. No terceiro, introduzimos os tipos (um dos maiores pontos fortes da linguagem) e suas manipulações.

Já no quarto, vemos como a linguagem trata as funções por meio dos conceitos de lambdas, currying e funções de alta ordem. No quinto, alavancamos o poder dos tipos usando o conceito de polimorfismo paramétrico, classes de tipos e um exemplo muito especial: os monoides.

No sexto, há uma breve introdução informal sobre Teoria das Categorias. O sétimo explora os funtores, um dos conceitos-chave para o entendimento do assunto a ser abordado no oitavo capítulo: as Mônadas. No nono, são dados vários exemplos práticos de Mônadas por meio do IO, que é a representação da computação com efeitos no Haskell.

Os dois últimos capítulos põem a mão na massa: no décimo, construímos um pequeno interpretador de uma minilinguagem e usamos o sistema de tipos (com uma espiada em GADTs) para garantir que só programas bem formados rodem; e no décimo primeiro, colocamos uma aplicação web no ar com a biblioteca Servant, descrevendo uma API como um tipo. Confira ainda o apêndice com todo o código do miniprojeto e as referências para seguir seus estudos.

O que há de novo nesta edição

Olá! Que bom ter você por aqui. Esta é uma versão revisada e ampliada do livro e eu quero te contar, rapidinho, o que mudou.

O livro está em dia com o Haskell de hoje

Revisei o livro inteiro para acompanhar a versão atual do Haskell. A forma de instalar a linguagem ficou mais simples (agora usamos o GHCup), e todos os exemplos de código foram testados de novo, um por um, para rodarem direitinho no compilador mais recente. Sempre que algo estava desatualizado ou com um errinho, foi corrigido.

Dois capítulos novos

A maior novidade são dois capítulos extras, no fim do livro, para você colocar a mão na massa:

Um pequeno interpretador: você vai criar uma minilinguagem de programação dentro do Haskell. É um jeito divertido de ver o sistema de tipos trabalhando a seu favor.

Haskell na web com Servant: aqui a gente fecha com chave de ouro, colocando uma aplicação web de verdade no ar, do zero até deixar o servidor rodando.

Mais exercícios e exemplos atualizados

Espalhei novos exercícios por vários capítulos, para você praticar mais. Alguns exemplos também foram modernizados, e as referências do fim do livro ganharam novas indicações para você seguir estudando.

Em resumo

Você tem em mãos um livro mais completo, com o código funcionando na versão atual do Haskell e duas aventuras novas para explorar. Espero que aproveite. Bons estudos e bem-vindo ao mundo Haskell!

 

Sumário

  • 1 Programação funcional
    • 1.1 Linguagem Haskell
    • 1.2 Haskell na web
    • 1.3 Conclusão
  • 2 Primeiros exemplos
    • 2.1 Primeiro contato com os tipos de dados e funções
    • 2.2 Operação com listas
    • 2.3 Compreensão de listas
    • 2.4 Tuplas
    • 2.5 Exercícios
    • 2.6 Conclusão
  • 3 Declarando novos tipos de dados
    • 3.1 Pattern matching
    • 3.2 Campos de um construtor
    • 3.3 Record syntax
    • 3.4 Miniprojeto: RH de uma empresa de TI
    • 3.5 Exercícios
    • 3.6 Conclusão
  • 4 Um pouco mais sobre funções
    • 4.1 Lambdas
    • 4.2 Funções de alta ordem
    • 4.3 Currying
    • 4.4 Exemplos de funções de alta ordem
    • 4.5 Sintaxe em funções
    • 4.6 Recursão
    • 4.7 Miniprojeto: RH de uma empresa de TI
    • 4.8 Exercícios
    • 4.9 Conclusão
  • 5 Polimorfismo paramétrico
    • 5.1 Tipos com parâmetros
    • 5.2 Restrição de tipos em funções
    • 5.3 Classes de tipos
    • 5.4 Outras classes
    • 5.5 Monoides
    • 5.6 Miniprojeto: trabalhando com parsers
    • 5.7 Exercícios
    • 5.8 Conclusão
  • 6 Teoria das Categorias
    • 6.1 Categorias
    • 6.2 Noção matemática de funtor
    • 6.3 Função identidade em Haskell
    • 6.4 Conclusão
  • 7 Funtores
    • 7.1 Funtor Maybe
    • 7.2 Criando seu funtor
    • 7.3 Funtores Aplicativos
    • 7.4 Funtores Contravariantes
    • 7.5 Miniprojeto: continuação usando funtores
    • 7.6 Exercícios
    • 7.7 Conclusão
  • 8 Mônadas
    • 8.1 Transformações naturais
    • 8.2 Definição
    • 8.3 Notação "do"
    • 8.4 A Mônada []
    • 8.5 Exercícios
    • 8.6 Conclusão
  • 9 Mônada IO
    • 9.1 Compilando um programa "Olá Mundo"
    • 9.2 Exemplos práticos
    • 9.3 Manipulando arquivos
    • 9.4 Miniprojeto final
    • 9.5 Exercícios
    • 9.6 Conclusão
  • 10 Um pequeno interpretador
    • 10.1 Representando programas como dados
    • 10.2 Avaliando programas (com checagem em tempo de execução)
    • 10.3 Tipos como exemplo de elegância: GADTs
    • 10.4 Exercícios
    • 10.5 Conclusão
  • 11 Haskell na web com Servant
    • 11.1 Seção 1: configurando o projeto com Cabal
    • 11.2 Seção 2: módulos e como atualizar o arquivo .cabal
    • 11.3 Seção 3: uma espiada em GADTs
    • 11.4 Seção 4: o Servant e a explicação dos seus tipos
    • 11.5 Seção 5 implementando os endpoints GET
    • 11.6 Seção 6 o servidor e o ponto de entrada (main)
    • 11.7 Exercícios
    • 11.8 Conclusão
  • 12 Apêndice
  • 13 Referências

Dados do produto

Número de páginas:
Data publicação:

Compartilhe!

Compartilhe no Facebook Compartilhe no Twitter

*Você terá acesso às futuras atualizações do livro.