Haskell Uma introdução à programação funcional
Alexandre Garcia de OliveiraPrefácio
Haskell é uma linguagem de programação que traz novas formas de se 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 deles em outras tecnologias, aplicados em outros contextos.
Este livro foi escrito como uma introdução à linguagem Haskell, para leitores já familiares 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 em ser funcional, pura, estaticamente tipada, com avaliação preguiçosa por padrão e com versões compiladas e interpretadas.
Com a crescente necessidade da indústria em escrever software altamente concorrente e paralelo, e capaz de ser jogado 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 o 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 programas está 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, propriedades de como expressões são avaliadas) e estáticas (a partir de mais metadados no seu rico sistema de tipos, programas "finais" sem casos não tratados).
Haskell é muito usado para a 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 rápido 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 nos entregam essas garantias e possibilidades, permeando essa tecnologia. E ele faz isso com a iniciativa improvável e bemsucedida de dois anos de aulas na FATEC-RL, ensinando seus alunos a beleza e 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.
INTRODUÇÃO
Este livro destina-se a alunos interessados em aprender sobre este paradigma que vem sendo adotado pelo mercado cada vez mais. 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 machucam, e servem para entender um ou dois exemplos do livro. Um aluno que tem facilidade com matemática e que tenha 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 Mônadas que é o ponto alto do livro. Ele possui nove capítulos mais 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 notado a dificuldade dos alunos de achar material em nossa língua mãe, 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 através 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 vemos 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. Finalmente, no último capítulo, são dados vários exemplos práticos de mônadas através do IO , que é a representação da computação com efeitos aqui no Haskell. Confira ainda o apêndice com todo o código do miniprojeto e referências para seguir seus estudos.
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 Apêndice
- 11 Referências
Dados do produto
- Número de páginas:
- 160
- ISBN:
- 978-85-5519-273-9
- Data publicação:
- 05/2017