The new edition of this text introduces functional programming in the Haskell language at a level appropriate for students and programmers with little or no experience of functional languages. The emphasis is on the process of crafting programs, problem solving and avoiding common pitfalls. The book is split into 3 parts : basic functional programming, abstraction and larger-scale programming, leading the reader step-by-step through the basics of the subject before introducing more advanced topics.