Este é um livro sobre introdução a programação funcional em Haskell. O livro é destinado a estudantes de graduação de cursos universitários de Ciência da Computação e cursos correlatos. O objetivo do livro é apresentar as ideias principais da programação funcional, como ela se desenvolveu e vem se desenvolvendo a partir das ideias de programação com tipos de dados polimórficos, tipos algébricos recursivos, sobrecarga dependente de contexto e programação monádica.
A motivação para escrever este livro se originou de algumas observações, que vão além de observações comuns feitas em outros livros sobre programação funcional, que colocam a programação funcional como mais adequada à construção de programas devido ao uso de uma base matemática que envolve o uso de equações e indução, em vez de comandos que modificam valores armazenados em posições de memória.
A primeira consideração é a de que a definição e o uso de funções recursivas e genéricas se baseia na definição de tipos polimórficos e recursivos: é importante distinguir a importância de definir estruturas de dados polimórficas e recursivas de modo simples, antes de definir funções que manipulam tais estruturas de dados. Neste aspecto, é fundamental o uso de tipos algébricos.
A segunda consideração é relativa à importância da definição de funções sobrecarregadas que permitem sobrecarga não apenas de igualdade e operadores aritméticos pré-definidos, como estamos acostumados a ver em linguagens de programação em geral, mas sobrecarga de funções que permitem a manipulação de elementos de estruturas de dados distintas, como por exemplo:
O uso dessas funções em geral requer maior treinamento mas leva à realização de tarefas de modo mais produtivo, em comparação com o uso de comandos de repetição de linguagens imperativas. A segunda parte do livro aborda a programação destas funções sobrecarregadas, sobre estruturas de dados distintas. Funções sobrecarregadas envolvem também funtores aplicativos e mônadas, que permitem obter um resultado por meio de funções que operam sobre elementos contidos em uma estrutura de dados. Essa parte do livro também ilustra como o uso de funções polimórficas e sobrecarregadas torna não só possível mas mais simples e eficiente o desenvolvimento de programas que podem operar com entrada e saída de dados, efeitos colaterais, tratamento de exceções, análise sintática etc.