Simon Peyton Jones: [https://www.haskell.org/definition/haskell98-report.pdf "Haskell 98 language and libraries: the Revised Report"], Cambridge University Press, 2003, Hardback, 272 pages, ISBN 0521826144, £45.00
<DD>
<B>Book Description</B><BR>
<B>Book Description</B><BR>
Haskell is the world's leading lazy functional programming language,
Haskell is the world's leading lazy functional programming language,
Line 19:
Line 25:
time. It should be a standard reference work for anyone involved in
time. It should be a standard reference work for anyone involved in
research, teaching, or application of Haskell.
research, teaching, or application of Haskell.
</BLOCKQUOTE>
The entire language definition is also available online:
The entire language definition is also available online:
[[Language_and_library_specification|Language and library specification]]
[[Language_and_library_specification|Language and library
</DT>
specification]].
</DL>
</DL>
= Textbooks=
==Textbooks==
<DL>
<DL>
<DT>Paul Hudak: [http://www.haskell.org/soe <EM>The Haskell School of Expression: Learning Functional Programming through Multimedia</EM>], Cambridge University Press, New York, 2000, 416
<dt>Donald Sannella, Michael Fourman, Haoran Peng, Philip Wadler :
pp, 15 line diagrams, 75 exercises, Paperback $29.95, ISBN:
[[Image: Introduction to Computation cover.jpg|frameless|right|70px|Cover]] [https://link.springer.com/book/10.1007/978-3-030-76908-6 Introduction to Computation: Haskell, Logic and Automata], ISBN13 978-3-030-76907-9, Paperback/eBook: 366 pages. Springer (January 2022).
0521644089, Hardback $74.95, ISBN: 0521643384
<dd>
<blockquote>
<B>Book Description</B><BR>
This uniquely accessible textbook introduces students to computation using a very distinctive approach, quite rapidly leading them into essential topics with sufficient depth, yet in a highly intuitive manner. The work is anchored in coverage of functional programming (in Haskell), symbolic logic, and finite automata – each a critical component of the foundations of informatics, and together offering students a clear glimpse into an intellectual journey beyond mere mastery of technical skills. From core elements like types, Venn diagrams and logic, to patterns of reasoning, sequent calculus, recursion and algebraic data types, the book spans the breadth of key concepts and methods that will enable students to readily progress with their studies in Computer Science.
<p>
Assuming no formal background in programming, this highly practical and accessible textbook provides the grounding fundamentals of computation for undergraduate students. Its flexible, yet clear expository style also makes the book eminently suitable as a self-study instructional guide for professionals or non-specialists interested in these topics.
<dt>Tom Schrijvers :
[[Image: Soar with Haskell cover.jpg|frameless|right|70px|Cover]] [https://www.packtpub.com/product/soar-with-haskell/9781805128458 Soar with Haskell], ISBN13 9781805128458, Paperback/eBook: 418 pages. Packt (December 2023).
<dd>
<B>Book Description</B><BR>
With software systems reaching new levels of complexity and programmers aiming for the highest productivity levels, software developers and language designers are turning toward functional programming because of its powerful and mature abstraction mechanisms. This book will help you tap into this approach with Haskell, the programming language that has been leading the way in pure functional programming for over three decades. The book begins by helping you get to grips with basic functions and algebraic datatypes, and gradually adds abstraction mechanisms and other powerful language features. Next, you’ll explore recursion, formulate higher-order functions as reusable templates, and get the job done with laziness. As you advance, you’ll learn how Haskell reconciles its purity with the practical need for side effects and comes out stronger with a rich hierarchy of abstractions, such as functors, applicative functors, and monads. Finally, you’ll understand how all these elements are combined in the design and implementation of custom domain-specific languages for tackling practical problems such as parsing, as well as the revolutionary functional technique of property-based testing. By the end of this book, you’ll have mastered the key concepts of functional programming and be able to develop idiomatic Haskell solutions.
<dt>John Whitington : [[Image: Hftvb-cover.jpg|frameless|right|70px|Cover]] [https://haskellfromtheverybeginning.com/ Haskell from the Very Beginning], ISBN13 9780957671133, Paperback/eBook: 216 pages. Coherent Press (October 2019)
<dd>
<B>Book Description</B><BR>
In Haskell from the Very Beginning John Whitington takes a no-prerequisites approach to teaching the basics of a modern general-purpose programming language. Each small, self-contained chapter introduces a new topic, building until the reader can write quite substantial programs. There are plenty of questions and, crucially, worked answers and hints.
Haskell from the Very Beginning will appeal both to new programmers, and to experienced programmers eager to explore functional languages such as Haskell. It is suitable both for formal use within an undergraduate or graduate curriculum, and for the interested amateur.
<dt>Alexander Granin : [[Image: fdaa-cover.jpg|frameless|right|70px|Cover]] [https://www.manning.com/books/functional-design-and-architecture Functional Design and Architecture, Second Edition], ISBN13 9781617299612, Paperback/eBook: 575 pages (estimated). Manning Publications (Fall December 2021)
<dd>
<B>Book Description</B><BR>
Functional Design and Architecture is a practical book that covers the biggest gap in the Haskell ecosystem: how to design real-world applications with low complexity and low risks. Application architectures, design patterns, best practices, methodologies and approaches - everything you need to write a high-quality code. The book introduces a new methodology - Functional Declarative Design, - and provides a comprehensive, complete view of Software Engineering in Haskell. It covers all the main topics: requirements analysis, domain-driven design, testing, domain-specific languages, databases, logging, multithreading, type-level programming, and so on.
This book doesn't introduce you to the Haskell language, but instead, it tells about high-level topics of Software Design. It can be your third Haskell book.
Haskell in Depth is the perfect second book on Haskell. After a quick refresher on Haskell basics, this hands-on guide dives into examples and application scenarios designed to teach how Haskell works and how to apply it correctly. You’ll learn about managing projects with Cabal and Stack, tackle error-handling and testing, and package programs and libraries for production deployment.
You’ll appreciate coverage of advanced Haskell features including programming polymorphically, working effectively with types, concurrent programming, data processing, web services, and more. Because it’s organized to make specific topics easy to find, you’ll return to this book again and again as your go-to Haskell reference.
<dt>Will Kurt : [[Image: Gph-cover.jpg|frameless|right|70px|Cover]] [https://www.manning.com/books/get-programming-with-haskell Get Programming with Haskell], ISBN13 9781617293764, Paperback/eBook: 616 pages. Manning Publications (March 2018)
<dd>
<B>Book Description</B><BR>
Get Programming with Haskell leads you through short lessons, examples, and exercises designed to make Haskell your own. It has crystal-clear illustrations and guided practice. You will write and test dozens of interesting programs and dive into custom Haskell modules. You will gain a new perspective on programming plus the practical ability to use Haskell in the everyday world. (The 80 IQ points: not guaranteed!)
Beginning Haskell provides a broad-based introduction to the Haskell language, its libraries and environment, and to the functional programming paradigm that is fast growing in importance in the software industry. The book takes a project-based approach to learning the language that is unified around the building of a web-based storefront. Excellent coverage is given to the Haskell ecosystem and supporting tools. These include the Cabal build tool for managing projects and modules, the HUnit and QuickCheck tools for software testing, the Scotty framework for developing web applications, Persistent and Esqueleto for database access, and also parallel and distributed programming libraries.
<dt>[[Image:Lyah.png|frameless|right|70px|Cover]] Miran Lipovača: [http://www.nostarch.com/lyah.htm <em>Learn You a Haskell for Great Good!</em>], Paperback: 360 pages, No Starch Press (April 2011), English, ISBN: 978-1-59327-283-8
<dd><B>Book Description</B><BR>
It's all in the name: Learn You a Haskell for Great Good! is a hilarious, illustrated guide to this complex functional language. Packed with the author's original artwork, pop culture references, and most importantly, useful example code, this book teaches functional fundamentals in a way you never thought possible.
<dt>[[Image:LearnPhysicsWithFunctionalProgramming_front.webp|frameless|right|70px|Cover]] Scott N. Walck: [https://lpfp.io <em>Learn Physics with Functional Programming: A Hands-on Guide to Exploring Physics with Haskell</em>], Paperback: 648 pages, No Starch Press (January 2023), English, ISBN: 978-1-7185-0166-9
<dd><B>Book Description</B><BR>
This book shows how to encode basic theoretical physics in Haskell. The author currently uses it in a computational physics course for physics majors at Lebanon Valley College. It covers Newtonian mechanics, a little special relativity, and electromagnetic theory up to the Maxwell equations. The book
teaches Haskell to people interested in science generally, or physics specifically.
<dt>[[Image:pih.jpg|frameless|right|70px|Cover]] Graham Hutton: [http://www.cs.nott.ac.uk/~pszgmh/pih.html <em>Programming in Haskell</em>], Paperback: 318 pages, 120 exercises, Cambridge University Press (September 1, 2016), English, ISBN-13: 978-1316626221
<dd>
<B>Book Description</B><BR>
This new edition has been extensively updated and expanded to include recent and more advanced features of Haskell, new examples and exercises, selected solutions, and freely downloadable lecture slides and example code. The presentation is clean and simple, while also being fully compliant with the latest version of the language, including recent changes concerning applicative, monadic, foldable and traversable types.
<dt>[[Image:Rwh-thumb.png|frameless|right|Cover]] Bryan O'Sullivan, Don Stewart, and John Goerzen: [http://book.realworldhaskell.org/ <em>Real World Haskell</em>], Paperback: 700 pages, O'Reilly, November 2008, English, ISBN-10: 0596514980, ISBN-13: 978-0596514983
<dd>
See ''[[Real World Haskell]]''.
<br>
<dt>[[Image:pcph-thumb.gif|70px|frameless|right|Cover]] Simon Marlow: [https://simonmar.github.io/pages/pcph.html <em>Parallel and Concurrent Programming in Haskell</em>], Paperback: 322 pages, O'Reilly, August 2013, English, ISBN-10: 1449335942, ISBN-13: 978-1449335946
<dd>
<B>Book Description</B><BR>
If you have a working knowledge of Haskell, this hands-on book shows you how to use the language’s many APIs and frameworks for writing both parallel and concurrent programs. You’ll learn how parallelism exploits multicore processors to speed up computation-heavy programs, and how concurrency enables you to write programs with threads for multiple interactions.
Author Simon Marlow walks you through the process with lots of code examples that you can run, experiment with, and extend. Divided into separate sections on Parallel and Concurrent Haskell, this book also includes exercises to help you become familiar with the concepts presented:
* Express parallelism in Haskell with the Eval monad and Evaluation Strategies
* Parallelize ordinary Haskell code with the Par monad
* Build parallel array-based computations, using the Repa library
* Use the Accelerate library to run computations directly on the GPU
* Work with basic interfaces for writing concurrent code
* Build trees of threads for larger and more complex programs
* Learn how to build high-speed concurrent network servers
* Write distributed programs that run on multiple machines in a network
<DT>[[Image:The_Haskell_School_of_Expression.jpg|frameless|right|Cover]] Paul Hudak: [http://web.archive.org/web/20190705205338/https://www.cs.yale.edu/homes/hudak/SOE/ <EM>The Haskell School of Expression: Learning Functional Programming through Multimedia</EM>], Cambridge University Press, New York, 2000, 416pp, 15 line diagrams, 75 exercises, Paperback $29.95, ISBN 0521644089, Hardback $74.95, ISBN 0521643384
<dd>
<B>Book Description</B><BR>
<B>Book Description</B><BR>
This book teaches functional programming as a way of thinking and
This book teaches functional programming as a way of thinking and
Line 43:
Line 129:
introduction to functional programming and moves rapidly on to more
introduction to functional programming and moves rapidly on to more
advanced topics. An underlying theme is the design and implementation
advanced topics. An underlying theme is the design and implementation
of domain specific languages, using three examples: FAL (a Functional
of <em>domain specific languages</em>, using three examples: FAL (a Functional
Animation Language), IRL (an Imperative Robot Language), and MDL (a
Animation Language), IRL (an Imperative Robot Language), and MDL (a
Music Description Language). Details about programming in Haskell
Music Description Language). Details about programming in Haskell
Line 49:
Line 135:
referred to and found quickly.
referred to and found quickly.
The book's Web Site contains source files for all programs in the
The book's [http://web.archive.org/web/20110720122354/http://plucky.cs.yale.edu/soe/ website] contains source files for all programs in the text, as well as the graphics libraries to run them under Windows and Linux platforms. It also contains PowerPoint slides useful for
text, as well as the graphics libraries to run them under Windows and
Linux platforms. It also contains PowerPoint slides useful for
teaching a course using the textbook.
teaching a course using the textbook.
</blockquote>
<DT>Simon Thompson: [http://www.cs.ukc.ac.uk/people/staff/sjt/craft2e/ <EM>Haskell: The Craft of Functional Programming</EM>], Second Edition,
*There is a review of SOE on this wiki: [[The Monad.Reader/Issue3/SoE Review]].
Addison-Wesley, 507 pages, paperback, 1999. ISBN
0-201-34275-8.
<DT>[[Image:The_Craft_of_Functional_Programming.jpg|frameless|right|Cover]] Simon Thompson: [http://www.cs.ukc.ac.uk/people/staff/sjt/craft2e/ <EM>Haskell: The Craft of Functional Programming</EM>], Second Edition, Addison-Wesley, 507 pages, paperback, 1999. ISBN 0-201-34275-8.
<blockquote>
<dd>
<B>Book Description</B><BR>
<B>Book Description</B><BR>
The second edition of Haskell: The Craft of Functional Programming is essential reading for beginners to functional programming and newcomers to the Haskell programming language. The emphasis is on the process of crafting programs and the text contains many examples and running case studies, as well as advice an program design, testing, problem solving and how to avoid common pitfalls.
The second edition of Haskell: The Craft of Functional Programming is essential reading for beginners to functional programming and newcomers to the Haskell programming language. The emphasis is on the process of crafting programs and the text contains many examples and running case studies, as well as advice an program design, testing, problem solving and how to avoid common pitfalls.
Line 72:
Line 156:
<B>Synopsis</B><BR>
<B>Synopsis</B><BR>
This books introduces Haskell at a level appropriate for those with little or no prior experience of functional programming. The emphasis is on the process of crafting programs, solving problems, and avoiding common errors.
This books introduces Haskell at a level appropriate for those with little or no prior experience of functional programming. The emphasis is on the process of crafting programs, solving problems, and avoiding common errors.
</blockquote>
<DT>Richard Bird: [http://www.prenhall.com/allbooks/ptr_0134843460.html <EM>Introduction to Functional Programming using Haskell</EM>], 2nd edition, Prentice Hall Press, 1998, 460 pp., ISBN: 0-13-484346-0.
<blockquote>
From the cover:
After the success of the first edition, Introduction to Functional Programming using Haskell has been thoroughly updated and revised to provide a complete grounding in the principles and techniques of programming with functions.
<DT>[[Image:Bird_TFWH.jpg|frameless|right|70 px|Cover]] Richard Bird: [https://www.cambridge.org/core/books/thinking-functionally-with-haskell/79F91D976F0C7229082325B41824EBBC# <EM>Thinking Functionally with Haskell</EM>], Cambridge University Press, 2014, 354 pp., ISBN-10: 1107452643, ISBN-13: 978-1107452640.
<dd>
Richard Bird is famed for the clarity and rigour of his writing. His new textbook, which introduces functional programming to students, emphasises fundamental techniques for reasoning mathematically about functional programs. By studying the underlying equational laws, the book enables students to apply calculational reasoning to their programs, both to understand their properties and to make them more efficient. The book has been designed to fit a first- or second-year undergraduate course and is a thorough overhaul and replacement of his earlier textbooks. It features case studies in Sudoku and pretty-printing, and over 100 carefully selected exercises with solutions.
The second edition uses the popular language Haskell to express functional programs. There are new chapters on program optimisation, abstract datatypes in a functional setting, and programming in a monadic style. There are completely new case studies, and many new exercises.
<DT>[[Image:Introduction_to_Functional_Programming_Systems_Using_Haskell.jpg|frameless|right|Cover]] Antony Davie: <EM>[https://www.amazon.com/Introduction-Programming-INTRODUCTION-PROGRAMMING-Jun-18-1992/dp/B003Q5UPH4 An Introduction to Functional Programming Systems Using Haskell]</EM> Cambridge University Press, 1992. ISBN 0-521-25830-8 (hardback). ISBN 0-521-27724-8 (paperback).
<dd>Cover:
As in the first edition, there is an emphasis on the fundamental techniques for reasoning about functional programs, and for deriving them systematically from their specifications.
The book is self-contained, assuming no prior knowledge of programming, and is suitable as an introductory undergraduate text for first- or second-year students.
</blockquote>
<DT>Antony Davie: [http://www.cambridge.org/uk/catalogue/catalogue.asp?isbn=0521277248 <EM>An Introduction to Functional Programming Systems Using Haskell</EM>], Cambridge University Press, 1992. ISBN 0-521-25830-8 (hardback). ISBN 0-521-27724-8 (paperback).
<blockquote>
Cover:
Functional programming is a style of programming that has become increasingly popular during the past few years.
Functional programming is a style of programming that has become increasingly popular during the past few years.
Line 103:
Line 176:
Semantics / Other Applicative Languages / Implications for Parallelism / Functional Programming in Von Neumann
Semantics / Other Applicative Languages / Implications for Parallelism / Functional Programming in Von Neumann
Languages
Languages
</blockquote>
<DT>Fethi Rabhi and Guy Lapalme: [http://www.iro.umontreal.ca/~lapalme/Algorithms-functional.html <EM> Algorithms: A functional programming approach</EM>],
<DT>[[Image:Algorithms_A_Functional_Approach.jpg|frameless|right|Cover]] Fethi Rabhi and Guy Lapalme: [http://www.iro.umontreal.ca/~lapalme/Algorithms-functional.html <EM> Algorithms: A functional programming approach</EM>],
Addison-Wesley, 235 pages, paperback, 1999. ISBN
Addison-Wesley, 235 pages, paperback, 1999. ISBN 0-201-59604-0<BR>
0-201-59604-0<BR>
<DD>
<BLOCKQUOTE>
<B>Book Description</B><BR>
<B>Book Description</B><BR>
The authors challenge more traditional methods of teaching algorithms
The authors challenge more traditional methods of teaching algorithms
Line 132:
Line 203:
The book is intended for computer science students taking algorithms
The book is intended for computer science students taking algorithms
and/or (basic or advanced) functional programming courses.
and/or (basic or advanced) functional programming courses.
</BLOCKQUOTE>
<dt>Jeremy Gibbons and Oege de Moor (eds.): [http://www.palgrave.com/catalogue/catalogue.asp?Title_Id=0333992857 <em>The Fun of Programming</em>],Palgrave, 2002, 288 pages. ISBN 0333992857.
<dt>[[Image:Fun_of_Programming.jpg|frameless|right|Cover]] Jeremy Gibbons and Oege de Moor (eds.): <em>[https://www.amazon.com/Fun-Programming-Cornerstones-Computing/dp/0333992857 The Fun of Programming]</em>,Palgrave, 2002, 288 pages. ISBN 0333992857.
<blockquote>
<dd>
<b>Book description:</b><br>
<b>Book description:</b><br>
In this textbook, leading researchers give tutorial expositions on the current state of the art of functional
In this textbook, leading researchers give tutorial expositions on the current state of the art of functional
programming. The text is suitable for an undergraduate course immediately following an introduction to
programming. The text is suitable for an undergraduate course immediately following an introduction to
functional programming, and also for self-study. All new concepts are illustrated by plentiful examples,
functional programming, and also for self-study. All new concepts are illustrated by plentiful examples,
as well as exercises. A website gives access to accompanying software.
as well as exercises. A [http://web.comlab.ox.ac.uk/oucl/publications/books/fop/ website] gives access to accompanying software.
</blockquote>
<dt> Cordelia Hall and John O'Donnell: [http://www.dcs.gla.ac.uk/~jtod/discrete-mathematics/ <em>Discrete Mathematics Using a Computer</em>],
<dt>Simon Peyton Jones: [https://simon.peytonjones.org/publications-1980/#the-implementation-of-functional-programming-languages <em>Implementation of Functional Programming Languages</em>], 500 pages, Prentice-Hall, 1987. ISBN 0134533259.
Springer, 2000, 360 pages. ISBN 1-85233-089-9.
<dd>
<blockquote>
This 1987 book is now out of print, but it is now available [https://www.microsoft.com/en-us/research/uploads/prod/1987/01/slpj-book-1987-r90.pdf online] in its entirety.
<b>Book description:</b><br>
This book introduces the main topics of discrete mathematics with a strong emphasis on
applications to computer science. It uses computer programs to implement and illustrate
the mathematical ideas, helping the reader to gain a concrete understanding of the
abstract mathematics. The programs are also useful for practical calculations, and they
can serve as a foundation for larger software packages.
Designed for first and second year undergraduate students, the book is also ideally suited
<dt>Simon Peyton Jones, David Lester: [http://www.amazon.com/Implementing-Functional-Languages-Prentice-Hall-International/dp/0137219520/sr=1-1/qid=1162002704/ref=sr_1_1/104-0009163-6568732?ie=UTF8&s=books <em>Implementing Functional Languages</em>], Paperback: 288 pages, Prentice Hall (August 1992), English, ISBN 0137219520 <br>
to self-study. No prior knowledge of functional programming is required; the book and
<dd>
the online documentation provide everything you will need.
The book is out of print. The full sources and a PDF version are
</blockquote>
[https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.109.8027&rep=rep1&type=pdf available for free].
<dt>Kees Doets and Jan van Eijck: [http://www.cwi.nl/~jve/HR <em>The Haskell Road to Logic, Maths and Programming</em>]. King's College Publications, London, 2004. ISBN 0-9543006-9-6 (14.00 pounds, $25.00).
This book gives a practical approach to understanding the
<blockquote>
implementations of non-strict functional languages using lazy graph
<b>Book description:</b><br>
reduction. The emphasis of the book is on building working prototypes of
The purpose of this book is to teach logic and mathematical reasoning
several functional language implementations (template- instantiation,
in practice, and to connect logical reasoning with computer
G-Machine, TIM, parallel G-Machine. In each case the authors provide a
programming. Throughout the text, abstract concepts are linked to
complete working prototype of a particular implementation, and then lead
concrete representations in Haskell. Everything one has to know about
the reader through a sequence of improvements which expand its scope.
programming in Haskell to understand the examples in the book is
This enables readers to develop, modify and experiment with their own
explained as we go along, but we do not cover every aspect of the
implementations and for use as a source of practical laboratory work
language. Haskell is a marvelous demonstration tool for logic and
material.
maths because its functional character allows implementations to
remain very close to the concepts that get implemented, while the
laziness permits smooth handling of infinite data structures.
We do not assume that our readers have previous experience with either
<dt>[[Image:TTFP.jpg|frameless|right|Cover]] Simon Thompson: [http://www.amazon.com/Functional-Programming-International-Computer-Science/dp/0201416670/sr=1-1/qid=1162002856/ref=sr_1_1/104-0009163-6568732?ie=UTF8&s=books <em>Type Theory and Functional Programming</em>], Addison-Wesley, 1991. ISBN 0-201-41667-0. Hardcover: 388 pages.
programming or construction of formal proofs. We do assume previous
<dd>
acquaintance with mathematical notation, at the level of secondary
school mathematics. Wherever necessary, we will recall relevant
facts. Everything one needs to know about mathematical
reasoning or programming is explained as we go along. We do assume
that our readers are able to retrieve software from the Internet and
install it, and that they know how to use an editor for constructing
program texts.
After having worked through the material in the book, i.e., after
having digested the text and having carried out a substantial number
of the exercises, the reader will be able to write interesting
programs, reason about their correctness, and document them in a clear
fashion. The reader will also have learned how to set up mathematical
proofs in a structured way, and how to read and digest mathematical
proofs written by others.
The book can be used as a course textbook, but since it comes with
solutions to all exercises (electronically available from the authors
upon request) it is also well suited for private study. The source
code of all programs discussed in the text, a list of errata,
further relevant material and an email link to the authors
can be found [http://www.cwi.nl/~jve/HR here].
</blockquote>
<dt>Simon Peyton Jones: <em>Implementation of Functional Programming Language</em>,Prentice-Hall, 1987. ISBN 0134533259.
<dt>Simon Peyton Jones, David Lester: <em>Implementing Functional Languages</em>, 1992.<br>
<blockquote>
The book is out of print. The full sources and a postscript version are
[http://research.microsoft.com/Users/simonpj/Papers/papers.html available for free].
</blockquote>
<dt>Simon Thompson: <em>Type Theory and Functional Programming</em>, Addison-Wesley, 1991. ISBN 0-201-41667-0.
<blockquote>
Now out of print, the original version is available [http://www.cs.kent.ac.uk/people/staff/sjt/TTFP/ here].
Now out of print, the original version is available [http://www.cs.kent.ac.uk/people/staff/sjt/TTFP/ here].
Line 220:
Line 246:
assertions as well as signature information. A third point of view emphasizes that programs (or
assertions as well as signature information. A third point of view emphasizes that programs (or
functions) can be extracted from proofs in the logic.
functions) can be extracted from proofs in the logic.
</blockquote>
</DL>
<DT>[[Image:Uma_Abordagem_Pratica.jpg|frameless|right|Cover]] Claudio Cesar de Sá and Marcio Ferreira da Silva: <em> Haskell: Uma Abordagem Prática</em>, [http://www.novatec.com.br Novatec Editora Ltda.], 2006, 296 pages, ISBN 85-7522-095-0. The price is R$ 62,00 (in Reais). Language: Portuguese
<dd>
This book is being published by Novatec Editora Ltda. You can access directly [http://www.novateceditora.com.br/livros/haskell/ here].
<br>
<b>Book description:</b><br>
This book brings a comprehensive vision of Haskell language. No
knowledge in another functional programming language is expected. In
addition, no background in programming is required. The book presents
issues from basic up to an intermediate level; it also includes some
advanced aspects of Haskell. The title of the book, <em>Haskell: Uma
Abordagem Prática</em>, in English <em>Haskell: A Practical Approach</em>, is the essence of the book. The result is a text that can be used in courses of programming and paradigms languages. Finally, many practical examples can be found throughout the book.
=Tutorials=
An additional page containing comments on this book is found here:
Other data as bibtex entry, cover's book in several formats, Winhugs-2001 for download, and so on. This page is Portuguese.
==Introductions to Haskell==
<dt>[[Image:portada.jpg|frameless|right|Cover]] Blas C. Ruiz, Francisco Gutiérrez, Pablo Guerrero y José E. Gallardo. [http://www.lcc.uma.es/~pepeg/pfHaskell/index.html <em>Razonando con Haskell</em>], Thompson 2004. ISBN 84-9732-277-0. Language: Spanish
<dd>
Descripción El objetivo principal de este libro es el de servir como
libro de texto de las asignaturas de Programación Declarativa
correspondientes a los estudios de Informática o Ciencias de la
Computación, y otras ciencias en general ( Matemáticas, Física, etc.).
El texto es fruto de una larga experiencia docente de los autores dentro
de las distintas asignaturas que desarrollan la Programación Funcional
en distintas titulaciones de la Universidad de Málaga. Aún así, su
lectura no queda condicionada a un conocimiento previo sobre lenguajes
de programación (de computadores), ni sobre Informática. De esta forma,
el libro puede ser utilizado por todo aquel que desee tener un
conocimiento amplio sobre la Programación Funcional.
;[http://www.haskell.org/tutorial/ A Gentle Introduction to Haskell]
<dt>[[Image:haskell-jp.jpg|frameless|right|Cover]] [http://www.amazon.co.jp/gp/product/4839919623 Haskell Primer: The first functional language to learn]. Jun Mukai. In Japanese. Yen 2,730.
:By Paul Hudak, John Peterson, and Joseph H. Fasel. The title is a bit misleading. Some knowledge of another functional programming language is expected. The emphasis is on the type system and those features which are really new in Haskell (compared to other functional programming languages). A classic.
<dd>
;[http://www.cs.utah.edu/~hal/docs/daume02yaht.pdf Yet Another Haskell Tutorial]
<dt>[[Image:Haskell-jp-2.jpg|frameless|right|Cover]] [http://www.amazon.co.jp/gp/product/4797336021 Practical Haskell Programming], Minero Aoki and Nobuo Yamashita. A primer on functional programming for real world programs. In Japanese. Yen 2,940.
:By Hal Daume III et al. A recommended tutorial for Haskell that is still under construction but covers already much ground. Also a classic text.
<dd>
;[http://www.haskell.org/~pairwise/intro/intro.html Haskell Tutorial for C Programmers]
<dt>[[Image:Purely_Functional_Data_Structures.jpg|frameless|right|Cover]] [https://www.amazon.com/Purely-Functional-Data-Structures-Okasaki/dp/0521663504 Purely Functional Data Structures] [http://web.archive.org/web/20111116194421/www.eecs.usma.edu/webs/people/okasaki/ Chris Okasaki], 232 pp., Cambridge University Press, 1998. ISBN 0-521-63124-6
:By Eric Etheridge. From the intro: "This tutorial assumes that the reader is familiar with C/C++, Python, Java, or Pascal. I am writing for you because it seems that no other tutorial was written to help students overcome the difficulty of moving from C/C++, Java, and the like to Haskell."
<dd>
From the cover:<BR/> Most books on data structures assume an imperative language like C or C++. However, data structures for these languages do not always translate well to functional languages such as Standard ML, Haskell, or Scheme. This book describes data structures and data structure design techniques from the point of view of functional languages. It includes code for a wide assortment both of classical data structures and of data structures developed exclusively for functional languages.This handy reference for professional programmers working with functional languages can also be used as a tutorial or for self-study. [http://web.archive.org/web/20120207054804/www.eecs.usma.edu/webs/people/okasaki/pfds-haskell.tar.gz Haskell source code for the book]
<DT>[[Функциональное программирование на языке Haskell]]
:From IBM developerWorks. This tutorial targets programmers of imperative languages wanting to learn about functional programming in the language Haskell. If you have programmed in languages such as C, Pascal, Fortran, C++, Java, Cobol, Ada, Perl, TCL, REXX, JavaScript, Visual Basic, or many others, you have been using an imperative paradigm. This tutorial provides a gentle introduction to the paradigm of functional programming, with specific illustrations in the Haskell 98 language. (Free registration required.)
;[http://www.cs.chalmers.se/~rjmh/tutorials.html Tutorial Papers in Functional Programming].
<DT>[[Практика работы на языке Haskell]]
:A collection of links to other Haskell tutorials, from John Hughes.
;[http://www.cs.ou.edu/cs1323h/textbook/haskell.shtml Two Dozen Short Lessons in Haskell]
<DT>[[14 занимательных эссе о языке Haskell и функциональном программировании]]
:By Rex Page. A draft of a textbook on functional programming, available by ftp. It calls for active participation from readers by omitting material at certain points and asking the reader to attempt to fill in the missing information based on knowledge they have already acquired. The missing information is then supplied on the reverse side of the page.
:Following the Perl Cookbook (by Tom Christiansen and Nathan Torkington, published by O'Reilly) spirit, the PLEAC Project aims to gather fans of programming, in order to implement the solutions in other programming languages.
[[Image:Cartea-lui-Dan-Popa-coperta-1.png|frameless|right|Cover]] [http://web.archive.org/web/20081227093758/https://www.edusoft.ro/detalii.php?id=81 Introducere in Haskell 98 prin exemple ]: Dan Popa, 230 pp., Edusoft Bacau, Romania, (Ian, 31, 2007),Romanian, ISBN 978-973-8934-48-1
<dd><b>De pe coperta</b><BR>
(ro) Cartea este simultan un manual introductiv de Haskell si o carte auxiliara pentru studentii de la cursul de limbaje formale. Veti avea satisfactia cunoasterii unui limbaj modern (...) in care algoritmul de sortare Quicksort se scrie pe 6 randuri, asa cum se poate vedea de altfel si in imaginea de pe coperta I. (...) Cartea cuprinde o serie de capitole folosite la Universitatea Bacau in calitate de auxiliare de laborator la disciplina Limbaje Formale si Automate.
<br>
(en) This book is simultaneously a manual of Haskell and an auxiliary book for the students of the FLA course (Formal Languges and Automata). You will be satisfied by this modern language,Haskell. Why ? Using Haskell the Quicksort algorithm can be writen on 6 lines (or less), as you can see on the cover. And that's not all ... This book is used at Bacau State University, Romania.
<dt>James Church : [[Image: Getting_Started_with_Haskell_Data_Analysis.png|frameless|right|70px|Cover]] [https://india.packtpub.com/in/big-data-and-business-intelligence/getting-started-haskell-data-analysis Getting Started with Haskell Data Analysis], ISBN13 9781789802863, Paperback/eBook: 160 pages. Packt October 2018)
:By Damir Medak and Gerhard Navratil. The fundamentals of functional languages for beginners.
<dd>
<B>Book Description</B><BR>
Every business and organization that collects data is capable of tapping into its own data to gain insights how to improve. Haskell is a purely functional and lazy programming language, well-suited to handling large data analysis problems. This book will take you through the more difficult problems of data analysis in a hands-on manner.
This book will help you get up-to-speed with the basics of data analysis and approaches in the Haskell language. You'll learn about statistical computing, file formats (CSV and SQLite3), descriptive statistics, charts, and progress to more advanced concepts such as understanding the importance of normal distribution. While mathematics is a big part of data analysis, we've tried to keep this course simple and approachable so that you can apply what you learn to the real world.
:A communal effort by several authors to produce the definitive Haskell textbook. Its very much a work in progress at the moment, and contributions are welcome.
;[http://video.s-inf.de/#FP.2005-SS-Giesl.(COt).HD_Videoaufzeichnung Video Lectures]
By the end of this book, you will have a thorough understanding of data analysis, and the different ways of analyzing data. You will have a mastery of all the tools and techniques in Haskell for effective data analysis.
:Lectures (in English) by Jürgen Giesl. About 30 hours in total, and great for learning Haskell. The lectures are 2005-SS-FP.V01 through 2005-SS-FP.V26. Videos 2005-SS-FP.U01 through 2005-SS-FP.U11 are exercise answer sessions, so you probably don't want those.
:A 15 lesson introduction to most aspects of Haskell.
<dd>
<B>Book Description</B><BR>
Haskell Cookbook provides recipes that start by illustrating the principles of functional programming in Haskell, and then gradually build up your expertise in creating industrial-strength programs to accomplish any goal. The book covers topics such as Functors, Applicatives, Monads, and Transformers. You will learn various ways to handle state in your application and explore advanced topics such as Generalized Algebraic Data Types, higher kind types, existential types, and type families. The book will discuss the association of lenses with type classes such as Functor, Foldable, and Traversable to help you manage deep data structures.
;[http://www.iceteks.com/articles.php/haskell/1 Introduction to Haskell]
<dt>[[Image:HaskellDataAnalysis.png|70px|frameless|right|Cover]] Nishant Shukla: [http://web.archive.org/web/20200108214119/http://haskelldata.com/ <em>Haskell Data Analysis Cookbook</em>], Paperback: 334 pages, Packt, June 2014, English, ISBN-10: 1783286334, ISBN-13: 978-1783286331
:By Chris Dutton, An "attempt to bring the ideas of functional programming to the masses here, and an experiment in finding ways to make it easy and interesting to follow".
<dd>
<B>Book Description</B><BR>
This book will take you on a voyage through all the steps involved in data analysis. It provides synergy between Haskell and data modeling, consisting of carefully chosen examples featuring some of the most popular machine learning techniques.
;[http://www.csc.depauw.edu/~bhoward/courses/0203Spring/csc122/haskintro/ An Introduction to Haskell]
You will begin with how to obtain and clean data from various sources. You will then learn how to use various data structures such as trees and graphs. The meat of data analysis occurs in the topics involving statistical techniques, parallelism, concurrency, and machine learning algorithms, along with various examples of visualizing and exporting results. By the end of the book, you will be empowered with techniques to maximize your potential when using Haskell for data analysis.
:A brief introduction, by Brian Howard.
;[http://web.syntaxpolice.org/lectures/haskellTalk/slides/index.html Introduction to Haskell]
The [https://github.com/BinRoot/Haskell-Data-Analysis-Cookbook GitHub public repository] contains over 130 practical recipes to accompany every chapter of the book. Use it as a Swiss Army Knife of algorithms and code snippets. Try a recipe a day, like a kata for your mind.
:By Isaac Jones (2003).
;[http://www.linuxjournal.com/article/9096 Translating Haskell into English]
<dt>Samuli Thomasson: [[Image: HaskellHighPerformanceProgramming.png|frameless|right|70px|Cover]] [https://www.packtpub.com/application-development/haskell-high-performance-programming Haskell High Performance Programming Book], ISBN 139781786464217, Paperback, 408 pages Packt, September 2016
:By Shannon Behrens, a glimpse of the Zen of Haskell, without requiring that they already be Haskell converts.
<dd>
<B>Book Description</B><BR>
Haskell, with its power to optimize the code and its high performance, is a natural candidate for high performance programming. It is especially well suited to stacking abstractions high with a relatively low performance cost. This book addresses the challenges of writing efficient code with lazy evaluation and techniques often used to optimize the performance of Haskell programs.
Learn to use parallelism and explore the concept of streaming. This book demonstrates the benefits of running multithreaded and concurrent applications. Next it will guide you through various profiling tools that will help you identify performance issues in your program.
;[http://www.thaiopensource.com/relaxng/derivative.html An algorithm for RELAX NG validation]
:by James Clark (of RELAX NG fame). Describes an algorithm for validating an XML document against a RELAX NG schema, uses Haskell to describe the algorithm. The algorithm in Haskell and Java is then [http://www.donhopkins.com/drupal/node/117 discussed here].
Design patterns and idioms can widen our perspective by showing us where to look, what to look at, and ultimately how to see what we are looking at. At their best, patterns are a shorthand method of communicating better ways to code (writing less, more maintainable, and more efficient code).
These tutorials examine using Haskell to writing complex real-wrold applications
This book starts with Haskell 98 and through the lens of patterns and idioms investigates the key advances and programming styles that together make "modern Haskell". Your journey begins with the three pillars of Haskell. Then you'll experience the problem with Lazy I/O, together with a solution. You'll also trace the hierarchy formed by Functor, Applicative, Arrow, and Monad. Next you'll explore how Fold and Map are generalized by Foldable and Traversable, which in turn is unified in a broader context by functional Lenses. You'll delve more deeply into the Type system, which will prepare you for an overview of Generic programming. In conclusion you go to the edge of Haskell by investigating the Kind system and how this relates to Dependently-typed programming.
;[[Hitchhikers Guide to the Haskell]]
<dt> James Church: [[Image:Learning_Haskell_Data_Analysis_cov.png|frameless|right|70px|Cover]] [https://www.packtpub.com/big-data-and-business-intelligence/learning-haskell-data-analysis/?utm_source=GCwiki.haskell.org&utm_medium=pod&utm_campaign=1784394707 Learning Haskell Data Analysis], Paperback: 198 pages, Packt, May 2015, English, ISBN-10: 1-784-39470-7, ISBN-13: 9781784394707
: Tutorial for C/Java/OCaml/... programers by Dmitry Astapov. From the intro: "This text intends to introduce the reader to the practical aspects of Haskell from the very beginning (plans for the first chapters include: I/O, darcs, Parsec, QuickCheck, profiling and debugging, to mention a few)".
<dd>
<B>Book Description</B><BR>
This book provides you with the skills to handle large amounts of data, even if that data is in a less than perfect state. Each chapter in the book helps to build a small library of code that will be used to solve a problem for that chapter.
;[http://haskell.org/haskellwiki/IO_inside Haskell I/O inside: Down the Rabbit's Hole]
The book starts with creating databases out of existing datasets, cleaning that data, and interacting with databases within Haskell in order to produce charts for publications. It then moves towards more theoretical concepts that are fundamental to introductory data analysis, but in a context of a real-world problem with real-world data. As you progress in the book, you will be relying on code from previous chapters in order to help create new solutions quickly. By the end of the book, you will be able to manipulate, find, and analyze large and small sets of data using your own Haskell libraries.
:By Bulat Ziganshin (2006), a comprehensive tutorial on using IO monad.
</dt>
;[http://research.microsoft.com/%7Esimonpj/Papers/marktoberdorf Tackling the awkward squad: monadic input/output, concurrency, exceptions, and foreign-language calls in Haskell]
<dt> Julien Dehos: [[Image:Book-ellipses-jd.jpg|frameless|right|70px|Cover]] [https://www.editions-ellipses.fr/programmation-fonctionnelle-introduction-applications-haskell-lusage-letudiant-developpeur-p-13083.html La programmation fonctionnelle - Introduction et applications en Haskell à l'usage de l'étudiant et du développeur], 264 pages, Ellipses Références sciences, 2019, French, ISBN: 9782340028777
:Simon Peyton Jones. Presented at the 2000 Marktoberdorf Summer School. In "Engineering theories of software construction", ed Tony Hoare, Manfred Broy, Ralf Steinbruggen, IOS Press, ISBN 1 58603 1724, 2001, pp47-96. The standard reference for monadic IO in GHC/Haskell. <br><strong>Abstract:</strong>Functional programming may be beautiful, but to write real applications we must grapple with awkward real-world issues: input/output, robustness, concurrency, and interfacing to programs written in other languages.
<dd>
Ce livre a pour objectif d’initier à la programmation fonctionnelle en général et au langage Haskell en particulier ; ceci de façon réellement exploitable. Il en présente les principales notions ainsi que différentes applications (intelligence artificielle pour des jeux, application web, convertisseur de fichiers textes, etc.). Enfin, il indique comment mettre en oeuvre le style fonctionnel dans des langages comme C++ et JavaScript.
</dt>
;[http://www.reid-consulting-uk.ltd.uk/docs/ffi.html A Guide to Haskell's Foreign Function Interface]
</DL>
:A guide to using the foreign function interface extension, using the rich set of functions in the Foreign libraries, design issues, and FFI preprocessors.
===Older tutorials===
===Foundations===
;[http://www.cs.chalmers.se/~augustss/AFP/manuals/haskeller.dvi.gz The Little Haskeller]
<DL>
:By Cordelia Hall and John Hughes. 9. November 1993, 26 pages. An introduction using the Chalmers Haskell B interpreter (hbi). Beware that it relies very much on the user interface of hbi which is quite different for other Haskell systems, and the tutorials cover Haskell 1.2 , not Haskell 98.
<DT>[[Image:TaPL.jpg|frameless|right|Cover]]
[http://www.amazon.com/Types-Programming-Languages-Benjamin-Pierce/dp/0262162091/ref=pd_sim_b_4/104-0009163-6568732 Types and Programming Languages] by Benjamin C. Pierce. 645 pages, The MIT Press, (February 1, 2002), English. ISBN 0262162091
<DD>From the cover:<BR>
A type system is a syntactic method for automatically checking the absence of certain erroneous behaviors by classifying program phrases according to the kinds of values they compute. The study of type systems--and of programming languages from a type-theoretic perspective-has important applications in software engineering, language design, high-performance compilers, and security. This text provides a comprehensive introduction both to type systems in computer science and to the basic theory of programming languages. The approach is pragmatic and operational; each new concept is motivated by programming examples and the more theoretical sections are driven by the needs of implementations. Each chapter is accompanied by numerous exercises and solutions, as well as a running implementation, available via the Web. Dependencies between chapters are explicitly identified, allowing readers to choose a variety of paths through the material. The core topics include the untyped lambda-calculus, simple type systems, type reconstruction, universal and existential polymorphism, subtyping, bounded quantification, recursive types, kinds, and type operators. Extended case studies develop a variety of approaches to modeling the features of object-oriented languages.
<DT>[[Image:Advanced_TaPL.jpg|frameless|right|Cover]] [http://www.amazon.com/Advanced-Topics-Types-Programming-Languages/dp/0262162288/ref=pd_sim_b_1/104-0009163-6568732 Advanced Topics in Types and Programming Languages] by Benjamin C. Pierce (Editor), Hardcover: 608 pages, The MIT Press (December 23, 2004), Language: English, ISBN 0262162288.<DD>
:By Jeroen Fokker, 1995. (153 pages, 600 KB). Textbook for learning functional programming with Gofer (an older implementation of Haskell). Here without Chapters 6 and 7.
From the cover:<BR>
The study of type systems for programming languages now touches many areas of computer science, from language design and implementation to software engineering, network security, databases, and analysis of concurrent and distributed systems. This book offers accessible introductions to key ideas in the field, with contributions by experts on each topic. The topics covered include precise type analyses, which extend simple type systems to give them a better grip on the run time behavior of systems; type systems for low-level languages; applications of types to reasoning about computer programs; type theory as a framework for the design of sophisticated module systems; and advanced techniques in ML-style type inference. Advanced Topics in Types and Programming Languages builds on Benjamin Pierce's Types and Programming Languages (MIT Press, 2002); most of the chapters should be accessible to readers familiar with basic notations and techniques of operational semantics and type systems -- the material covered in the first half of the earlier book. Advanced Topics in Types and Programming Languages can be used in the classroom and as a resource for professionals. Most chapters include exercises, ranging in difficulty from quick comprehension checks to challenging extensions, many with solutions.
;[http://wiki.python.org/moin/PythonVsHaskell Comparing Haskell and Python]
<DT>[http://web.archive.org/web/20160320032411/www.cs.cmu.edu/~rwh/plbook/ Programming Languages: Theory and Practice] by Robert Harper. (Draft).
:A short overview of similarities and differences between Haskell and Python.
<DD>A working draft of a planned book on the theoretical foundations of practical programming languages.
;[http://mult.ifario.us/articles/2006/10/11/first-steps-with-haskell-for-web-applications Haskell + FastCGI versus Ruby on Rails]
<DT>[https://www.amazon.com/Computational-Semantics-Functional-Programming-Eijck/dp/0521757606 Computational Semantics and Type Theory]
:A short blog entry documenting performance results with ruby on rails and Haskell with fastcgi
by Jan van Eijck. Draft.
<DD>[http://homepages.cwi.nl/~jve/cs/ Website].
==Reference material==
<DT>[http://www.paultaylor.eu/stable/Proofs+Types.html Proofs and Types]
by Jean-Yves Girard translated and with appendices by Paul Taylor and Yves Lafont.
<DD>
Based on a short graduate course on typed lambda-calculus given at the Universit Paris VII in the autumn term of 1986-7.
;[http://undergraduate.csse.uwa.edu.au/units/230.301/lectureNotes/tourofprelude.html A Tour of the Haskell Prelude (basic functions)]
<DT>[http://web.archive.org/web/20170511031828/foswiki.cs.uu.nl/foswiki/Techno/ProgrammingLanguageTheoryTextsOnline Programming language theory texts online]
:By Bernie Pope and Arjan van IJzendoorn.
<DD>
Collection of online programming language theory texts maintained by Frank Atanassow
;[http://cs.anu.edu.au/Student/comp1100/haskell/tourofsyntax.html Tour of the Haskell Syntax]
<DT>[http://www.cse.chalmers.se/research/group/logic/book/ Programming in Martin-Löf's Type Theory: An Introduction] by Bengt Nordström, Kent Petersson and Jan M. Smith. 1990.
:An explanation for beginners of many Haskell functions that are predefined in the Haskell Prelude.
;[http://haskell.org/ghc/docs/latest/html/libraries/ Documentation for the standard libraries]
<DT>[[Image:Coperta5.jpg|frameless|right|75px|Haskell - PIM]] [[Practica_interpretarii_monadice|Practical monadic interpretation]] by Dan Popa , Language: Romanian
:Complete documentation of the standard Haskell libraries.
I am delighted to introduce this book on the use of monads in Haskell as a way of structuring interpreters. In the early days, Haskell's most distinctive feature was lazy evaluation. Laziness forced us to take a pure approach to input/output, which meant that Haskell's I/O was initially rather weak. This weakness ultimately proved a strength, however, because it led us to the discovery that monads were not just an abstract mathematical concept, but were immediately applicable as a powerful program structuring mechanism.
Monadic programming is not just to do with input/output: it is much more powerful. That is why I am pleased to see this book, which describes in some detail how to write a language interpreter using a monadic approach.
:Some Haskell programming and style conventions.
;[http://haskell.org/haskellwiki/Category:Tutorials A growing list of Haskell tutorials on a diverse range of topics]
In retrospect, the discovery of monads as a practical programming pattern is one of Haskell's most substantial contributions to the world of programming -- and it is one that you will share if you work through this book.
:Available on this wiki
== Motivation for using Haskell ==
I am also very happy to see Haskell growing in popularity among our brothers and sisters in Eastern Europe, and in Romania in particular. Enjoy!
:By [http://www.md.chalmers.se/~rjmh/ John Hughes], The Computer Journal, Vol. 32, No. 2, 1989, pp. 98 - 107. Also in: David A. Turner (ed.): Research Topics in Functional Programming, Addison-Wesley, 1990, pp. 17 - 42.<BR> Exposes the advantages of functional programming languages. Demonstrates how higher-order functions and lazy evaluation enable new forms of modularization of programs.
</DL>
;[[Why Haskell matters]]
===Mathematics===
:Discussion of the advantages of using Haskell in particular. An excellent article.
:By [http://www.cs.ukc.ac.uk/people/staff/sjt/index.html Simon Thompson]. Unpublished, May 1997.<BR> <STRONG>Abstract:</STRONG> This paper explores how certain ideas in object oriented languages have their correspondents in functional languages. In particular we look at the analogue of the iterators of the C++ standard template library. We also give an example of the use of constructor classes which feature in Haskell 1.3 and Gofer.
;[http://www-128.ibm.com/developerworks/java/library/j-cb07186.html Explore functional programming with Haskell]
===Miscellaneous===
:Introduction to the benefits of functional programming in Haskell by Bruce Tate.
==Analysis and design methods==
[[Real World #haskell]]
See [[Analysis and design]].
===Videos===
== Teaching Haskell ==
<dt>Richard Cook : [[Image: Building-an-Application-with-Functional-Haskell-Video.png|frameless|right|70px|Cover]] [https://www.packtpub.com/application-development/building-application-functional-haskell-video Building an Application with Functional Haskell (Video)], ISBN13 9781787285088, Course Length 2 hours 9 minutes. Packt (August 2017)
<dd>
<B>Video Description</B><BR>
This video is specifically aimed at anybody who knows the essentials of the Haskell programming language and who is interested in moving onto developing real programs that will make use of file I/O, command-line parsers and various third-party packages. This course will take you through the complete journey from writing your first Haskell program to getting familiarized with Haskell and all its functionalities.
;[http://www.cs.ukc.ac.uk/pubs/1997/208/index.html Where do I begin? A problem solving approach to teaching functional programming]
:By [http://www.cs.ukc.ac.uk/people/staff/sjt/index.html Simon Thompson]. In Krzysztof Apt, Pieter Hartel, and Paul Klint, editors, First International Conference on Declarative Programming Languages in Education. Springer-Verlag, September 1997. <br> <STRONG>Abstract:</STRONG> This paper introduces a problem solving method for teaching functional programming, based on Polya's `How To Solve It', an introductory investigation of mathematical method. We first present the language independent version, and then show in particular how it applies to the development of programs in Haskell. The method is illustrated by a sequence of examples and a larger case study.
<dd>
<B>Video Description</B><BR>
This course builds on the foundations provided by the Fundamentals of Practical Haskell Programming course and helps to bridge the gap between introductory and advanced Haskell by teaching you how to manage and develop complex programs. We'll also dispel the myth that Haskell is only useful for toy programs.
;[http://www.cs.ukc.ac.uk/pubs/1995/214/index.html Functional programming through the curriculum]
<dt>Richard Cook : [[Image: Fundamentals_of_Practical_Haskell_Programming.png|frameless|right|70px|Cover]] [https://www.packtpub.com/application-development/fundamentals-practical-haskell-programming-video Fundamentals of Practical Haskell Programming (Video)], ISBN13 9781787288768, Video Length 2 hours and 59 minutes. Packt (March 2017)
:By [http://www.cs.ukc.ac.uk/people/staff/sjt/index.html Simon Thompson]and Steve Hill. In Pieter H. Hartel and Rinus Plasmeijer, editors, Functional Programming Languages in Education, LNCS 1022, pages 85-102. Springer-Verlag, December 1995. <br> <STRONG>Abstract:</STRONG> This paper discusses our experience in using a functional language in topics across the computer science curriculum. After examining the arguments for taking a functional approach, we look in detail at four case studies from different areas: programming language semantics, machine architectures, graphics and formal languages.
<dd>
<B>Video Description</B><BR>
This video course will take you through all the concepts of functional programming (FP) and Haskell language. First, we’ll address all the problems with FP and Haskell. Then we’ll help you distinguish the difference between FP and Haskell. We’ll then guide you through Haskell in depth. We’ll help you create your first Haskell program. You’ll then be given a brief insight into GHCi (Glasgow Haskell Compiler). Later we’ll explore the different values, expressions and programs in Haskell in depth.
;[http://www.cse.unsw.edu.au/~chak/papers/CK02a.html The Risks and Benefits of Teaching Purely Functional Programming in First Year]
<dt> [[Image: Haskell Data Analysis Made Easy.png|frameless|right|70px|Cover]] [https://www.packtpub.com/big-data-and-business-intelligence/haskell-data-analysis-made-easy Haskell: Data Analysis Made Easy], ISBN13 9781787283633, Course Length 7 hours 30 minutes. Packt (February 2017)
:By [http://www.cse.unsw.edu.au/~chak Manuel M. T. Chakravarty] and [http://www.cse.unsw.edu.au/~keller Gabriele Keller]. Journal of Functional Programming 14(1), pp 113-123, 2004. An earlier version of this paper was presented at Functional and Declarative Programming in Education (FDPE02). <br> <strong>Abstract</strong> We argue that teaching purely functional programming as such in freshman courses is detrimental to both the curriculum as well as to promoting the paradigm. Instead, we need to focus on the more general aims of teaching elementary techniques of programming and essential concepts of computing. We support this viewpoint with experience gained during several semesters of teaching large first-year classes (up to 600 students) in Haskell. These classes consisted of computer science students as well as students from other disciplines. We have systematically gathered student feedback by conducting surveys after each semester. This article contributes an approach to the use of modern functional
<dd>
languages in first year courses and, based on this, advocates the use of functional languages in this setting.
<B>Course Description</B><BR>
This course will introduce the basic concepts of Haskell and move on to discuss how Haskell can be used to solve the issues by using the real-world data.
The course will guide you through the installation procedure, after you have all the tools that you require in place, you will explore the basic concepts of Haskell including the functions, and the data structures.
With a good hold on the basics of Haskell and data analysis, you will then be introduced to advanced concepts of data analysis such as Kernel Density Estimation, Hypothesis testing, Regression analysis, text analysis, clustering, Naïve Bayes Classification, and Principal Component Analysis.
In this course, you’ll discover different ways to structure interactions between the program and the outside world. We’ll look at some subtler aspects of the IO monad, such as lazy IO and unsafePerformIO. In addition to the IO monad, we’ll also check out two other structured forms of interaction: streaming libraries and functional reactive programming.
Then we explore parallel, concurrent, and distributed programming. Thanks to purity, Haskell is especially well-suited for the first two, and so there are a number of approaches to cover. As for distributed programming, we focus on the idea of splitting a large monolithic program into smaller microservices, asking whether doing so is a good idea. We’ll also consider a different way of interacting with other microservices, and explore an alternative to microservices.
See also the [[Monad]] HaskellWiki page with another list of tutorials (should this redundancy be removed? -- not sure...)
<dt>James Church : [[Image:Advanced_data.jpeg|frameless|right|70px|Cover]] [https://www.packtpub.com/big-data-and-business-intelligence/advanced-data-analysis-haskell-video Advanced Data Analysis with Haskell Video], ISBN13 9781785287237, Course Length 4 hours 4 minutes Packt, December 2016
<dd>
<B>Video Description</B><BR>
In this video, you will be guided on how to find correlations in data, as well as multiple dependent variables. You will be given a theoretical overview of the types of regression and we’ll show you how to install the LAPACK and HMatrix libraries. By the end of the first part, you’ll be familiar with the application of N-grams and TF-IDF.
Once you’ve learned how to analyze data, the next step is organizing that data with the help of machine learning algorithms. You will be briefed on the mathematics and statistical theorems such as Baye’s law and its application, as well as eigenvalues and eigenvectors using HMatrix.
By the end of this course, you’ll have an understanding of data analysis, different ways to analyze data, and the various clustering algorithms available. You’ll also understand Haskell and will be ready to write code with it.
;[http://www.nomaware.com/monads/html/ All About Monads]
:By Jeff Newbern. This tutorial aims to explain the concept of a monad and its application to functional programming in a way that is easy to understand and useful to beginning and intermediate Haskell programmers. Familiarity with the Haskell language is assumed, but no prior experience with monads is required.
<dd>
<B>Video Description</B><BR>
This video would begin with the fundamentals and building blocks of Haskell programming language with special emphasis on functional programming. It will be covering how Haskell variables, syntax work alongwith Haskell datatypes and functions.
You will learn how to solve programming problems while creating an application with hands-on experience. You will then move on to learning writing expressions and high-order functions.
At the end of the video, you will be able to build a complete application with Haskell alongwith learning the important functionalities.
;[http://db.ewi.utwente.nl/Publications/PaperStore/db-utwente-0000003696.pdf The Haskell Programmer's Guide to the IO Monad - Don't Panic.]
<dt>James Church: [[Image: GettingStartedWithHaskellDataAnalysis1.png|frameless|right|70px|Cover]] [https://www.packtpub.com/big-data-and-business-intelligence/getting-started-haskell-data-analysis-video Getting Started with Haskell Data Analysis Video], Course Length: 3 hours 18 minutes, Packt, July 2016, English, ISBN-13: 9781785880841
:Stefan Klinger. This report scratches the surface of category theory, an abstract branch of algebra, just deep enough to find the monad structure. It seems well written.
<dd>
<B>Course Description</B><BR>
Data analysis is part computer science and part statistics. An important part of data analysis is validating your assumptions with real-world data to see if there is a pattern, or a particular user behavior that you can validate. This video course will help you get up to speed with the basics of data analysis and approaches in the Haskell language. You'll learn about statistical computing, file formats (CSV and SQLite3), descriptive statistics, charts, and onto more advanced concepts like understanding the importance of normal distribution. Whilst mathematics is a big part of data analysis, we’ve tried to keep this course simple and approachable so that you can apply what you learn to the real world.
;[http://www-users.mat.uni.torun.pl/~fly/materialy/fp/haskell-doc/Monads.html What the hell are Monads?]
==Joke==
:By Noel Winstanley. A basic introduction to monads, monadic programming and IO. This introduction is presented by means of examples rather than theory, and assumes a little knowledge of Haskell.
;[http://www.engr.mun.ca/~theo/Misc/haskell_and_monads.htm Monads for the Working Haskell Programmer -- a short tutorial]
<DL>
:By Theodore Norvell.
<dt>[[Image:FunctionalIkamusume.jpg|frameless|right|70px|Cover]] Team "Referential Transparent Sea Keepers": [http://web.archive.org/web/20171224114748/www.paraiso-lang.org/ikmsm/ <em>Functional Ikamusume</em>]
[http://web.archive.org/web/20171224043722/www.paraiso-lang.org/ikmsm/books/index.html <em>book series</em>], Japanese
<dd><B>Book Description</B><BR>
Functional Ikamusume book series provides a forum for researchers, developers, and anime-watchers to publish their latest work, articles, and “mousou (妄想)” on the design, implementations, principles, and uses of functional programming and Ikamusume. The book series covers the entire spectrum of work, from practice to theory, from frank introduction of functional programming to latest research work, from Ikamusume with some functional flavor to functional programming with some Ikamusume flavor. Let’s enjoy writing articles on functional programming in frank “geso” style de-geso!!
;[http://sigfpe.blogspot.com/2006/08/you-could-have-invented-monads-and.html You Could Have Invented Monads! (And Maybe You Already Have.)]
Past books are written entirely in Japanese, and books are planned to be sold in Japan, but we also accept articles in English. For more information on functional Ikamusume, see the links above (all in Japanese), or ask @xhl_kogitsune or [http://web.archive.org/web/20171224051807/www.paraiso-lang.org/ikmsm/members.html "other members"] on twitter, or xhlkogitsune on Skype. You don’t have to be worried about what is Functional Ikamusume —— she is just Ikamusume who loves functional programming, as you love it.
:A short tutorial on monads, introduced from a pragmatic approach, with less category theory references
;[http://www.cs.chalmers.se/~augustss/AFP/monads.html Systematic Design of Monads]
If you are interested in writing Functional Ikamusume articles, please contact xhlkogitsune on Skype or the authors on twitter. You can use Japanese or English for discussion. A text chat room is on Skype, and I’ll invite you to the chat room. While the chat is currently in Japanese, most participants can read/write English.
:John Hughes & Magnus Carlsson. Many useful monads can be designed in a systematic way, by successively adding facilities to a trivial monad. The capabilities that can be added in this way include state, exceptions, backtracking, and output. Here we give a brief description of the trivial monad, each kind of extension, and sketches of some interesting operations that each monad supports.
;[[Meet Bob The Monadic Lover]]
</DL>
:by Andrea Rossato. A by-the-author-supposed-to-be funny and short introduction to Monads, with code but without any reference to category theory: what monads look like and what they are useful for, from the perspective of a ... lover. (There is also the slightly more serious [[The Monadic Way]] by the same author.)
;[http://uebb.cs.tu-berlin.de/~magr/pub/Transformers.en.html Monad Transformers Step by Step]
:Martin Grabmüller: a small tutorial on using monad transformers. In contrast to others found on the web, it concentrates on using them, not on their implementation.
See also [[Research papers/Monads and arrows]]
==Using arrows==
This topic has an own HaskellWiki page: [[Arrow]].
;[http://www.haskell.org/arrows/ Arrows: A General Interface to Computation]
This topic has an own HakellWiki page: [[Attribute grammar]]
== Categorical programming ==
See its own HaskellWiki page: [[Category theory#Categorical programming]].
== Data structures ==
;[http://www.cambridge.org/uk/catalogue/catalogue.asp?isbn=0521663504 Purely Functional Data Structures]
:[http://www.cs.columbia.edu/~cdo/ Chris Okasaki], 232 pp., Cambridge University Press, 1998. ISBN 0-521-63124-6<BR> From the cover: <BLOCKQUOTE> Most books on data structures assume an imperative language like C or C++. However, data structures for these languages do not always translate well to functional languages such as Standard ML, Haskell, or Scheme. This book describes data structures and data structure design techniques from the point of view of functional languages. It includes code for a wide assortment both of classical data structures and of data structures developed exclusively for functional languages.This handy reference for professional programmers working with functional languages can also be used as a tutorial or for self-study. [http://www.cs.columbia.edu/~cdo/pfds-haskell.tar.gz Haskell source code for the book] </BLOCKQUOTE>
See [[Research papers/Data structures]]
==Schools on advanced funtional programming==
<EM>Advanced Functional Programming</EM>, First International Spring
School on Advanced Functional Programming Techniques, Bastad, Sweden, LNCS 925, Springer-Verlag, 1995 (editors: J. Jeuring, E. Meijer).
*<EM>Functional Parsers</EM> by Jeroen Fokker, p. 1-23.
*<EM>Monads for functional programming</EM> by Philip Wadler, p. 24-52.
*<EM>The Design of a Pretty-printing Library</EM> by John Hughes, p. 52-96.
*<EM>Functional Programming with Overloading and Higher-Order Polymorphism</EM>, Mark P. Jones, p. 97-136.
*<EM>Programming with Fudgets</EM> by Thomas Hallgren and Magnus Carlsson, p. 137-182.
*<EM>Constructing Medium Sized Efficient Functional Programs in Clean</EM> by Marko C.J.D. van Eekelen and Rinus J. Plasmeijer, p. 183-227.
*<EM>Merging Monads and Folds for Functional Programming</EM> by Erik Meijer and Johan Jeuring, p. 228-266.
*<EM>Programming with Algebras</EM> by Richard B. Kieburtz and Jeffrey Lewis, p. 267-307.
*<EM>Graph Algorithms with a Functional Flavour</EM> by John Launchbury, p. 308-331.
[http://www.cse.ogi.edu/PacSoft/conf/summerschool96.html <EM>Advanced Functional Programming</EM>], Second International Summer School on Advanced Functional Programming Techniques, Evergreen State College, WA, USA, LNCS 1126, Springer-Verlag, 1996 (editors: J. Launchbury, E. Meijer, T. Sheard).
*<EM>Composing the User Interface with Haggis</EM> by Sigbjorn Finne and Simon Peyton Jones, p. 1-37.
*<EM>Haskore Music Tutorial</EM> by Paul Hudak, p. 38-67.
*<EM>Polytypic Programming</EM> by Johan Jeuring and Patrick Jansson, p. 68-114.
*<EM>Implementing Threads in Standard ML</EM> by Peter Lee, p. 115-130.
*<EM>Functional Data Structures</EM> by Chris Okasaki, p. 131-158.
*<EM>Heap Profiling for Space Efficiency</EM> by Colin Runciman and Niklas Röjemo, p. 159-183.
*<EM>Deterministic, Error-Correcting Combinator Parsers</EM> by S. Doaitse Swierstra and Luc Duponcheel, p. 184-207.
*<EM>Essentials of Standard ML Modules</EM> by Mads Tofte, p. 208-238.
[http://alfa.di.uminho.pt/~afp98/ Advanced Functional Programming, Third International School, AFP'98],
in Braga, Portugal from 12th to 19th September 1998, LNCS 1608, Springer-Verlag, 1999
(editors: D. Swierstra, P. Henriques and J. Oliveira).<BR>
All lecture notes and further material are available from the web site.
= Foundations =
Some books and links listed here can be found also in the articles of ''Theoretical foundations'' category
* see [[Mathematics]]
* or browse ''Theoretical foundations'' among [[Special:Categories]].
;[http://www.dcs.qmul.ac.uk/~pt/Practical_Foundations/ Practical Foundations of Mathematics]
:Paul Taylor. Cambridge University Press, ISBN: 0-521-63107-6, xii+576 pages, September 2000.
;[http://www.cwru.edu/artsci/math/wells/pub/ttt.html Toposes, Triples and Theories]
:Michael Barr and Charles Wells. The revised version of their formerly Springer Verlag published book is online for free download. Note that they use the name ''triple'' instead of ''monad''.
=[[Research papers]]=
A large collection of research papers published on various aspects of Haskell.
[http://haskell.readscheme.org/ An Online Bibliography of Haskell research]
:ReadScheme.org
Latest revision as of 13:28, 28 March 2024
Books covering many aspects of Haskell.
In addition to this wiki page, many English books related to Haskell are listed in a
"Haskell Books index". An
"RSS feed"
can be used to receive notifications when new books are added to the index.
Book Description
Haskell is the world's leading lazy functional programming language,
widely used for teaching, research, and applications. The language
continues to develop rapidly, but in 1998 the community decided to
capture a stable snapshot of the language: Haskell 98. All Haskell
compilers support Haskell 98, so practitioners and educators alike
have a stable base for their work. This book constitutes the agreed
definition of the Haskell 98, both the language itself and its
supporting libraries. It has been considerably revised and refined
since the original definition, and appears in print for the first
time. It should be a standard reference work for anyone involved in
research, teaching, or application of Haskell.
The entire language definition is also available online:
Language and library
specification.
Book Description
This uniquely accessible textbook introduces students to computation using a very distinctive approach, quite rapidly leading them into essential topics with sufficient depth, yet in a highly intuitive manner. The work is anchored in coverage of functional programming (in Haskell), symbolic logic, and finite automata – each a critical component of the foundations of informatics, and together offering students a clear glimpse into an intellectual journey beyond mere mastery of technical skills. From core elements like types, Venn diagrams and logic, to patterns of reasoning, sequent calculus, recursion and algebraic data types, the book spans the breadth of key concepts and methods that will enable students to readily progress with their studies in Computer Science.
Assuming no formal background in programming, this highly practical and accessible textbook provides the grounding fundamentals of computation for undergraduate students. Its flexible, yet clear expository style also makes the book eminently suitable as a self-study instructional guide for professionals or non-specialists interested in these topics.
Tom Schrijvers :
CoverSoar with Haskell, ISBN13 9781805128458, Paperback/eBook: 418 pages. Packt (December 2023).
Book Description
With software systems reaching new levels of complexity and programmers aiming for the highest productivity levels, software developers and language designers are turning toward functional programming because of its powerful and mature abstraction mechanisms. This book will help you tap into this approach with Haskell, the programming language that has been leading the way in pure functional programming for over three decades. The book begins by helping you get to grips with basic functions and algebraic datatypes, and gradually adds abstraction mechanisms and other powerful language features. Next, you’ll explore recursion, formulate higher-order functions as reusable templates, and get the job done with laziness. As you advance, you’ll learn how Haskell reconciles its purity with the practical need for side effects and comes out stronger with a rich hierarchy of abstractions, such as functors, applicative functors, and monads. Finally, you’ll understand how all these elements are combined in the design and implementation of custom domain-specific languages for tackling practical problems such as parsing, as well as the revolutionary functional technique of property-based testing. By the end of this book, you’ll have mastered the key concepts of functional programming and be able to develop idiomatic Haskell solutions.
John Whitington : CoverHaskell from the Very Beginning, ISBN13 9780957671133, Paperback/eBook: 216 pages. Coherent Press (October 2019)
Book Description
In Haskell from the Very Beginning John Whitington takes a no-prerequisites approach to teaching the basics of a modern general-purpose programming language. Each small, self-contained chapter introduces a new topic, building until the reader can write quite substantial programs. There are plenty of questions and, crucially, worked answers and hints.
Haskell from the Very Beginning will appeal both to new programmers, and to experienced programmers eager to explore functional languages such as Haskell. It is suitable both for formal use within an undergraduate or graduate curriculum, and for the interested amateur.
Book Description
Functional Design and Architecture is a practical book that covers the biggest gap in the Haskell ecosystem: how to design real-world applications with low complexity and low risks. Application architectures, design patterns, best practices, methodologies and approaches - everything you need to write a high-quality code. The book introduces a new methodology - Functional Declarative Design, - and provides a comprehensive, complete view of Software Engineering in Haskell. It covers all the main topics: requirements analysis, domain-driven design, testing, domain-specific languages, databases, logging, multithreading, type-level programming, and so on.
This book doesn't introduce you to the Haskell language, but instead, it tells about high-level topics of Software Design. It can be your third Haskell book.
This is the second edition of the book.
Book Description
Haskell in Depth is the perfect second book on Haskell. After a quick refresher on Haskell basics, this hands-on guide dives into examples and application scenarios designed to teach how Haskell works and how to apply it correctly. You’ll learn about managing projects with Cabal and Stack, tackle error-handling and testing, and package programs and libraries for production deployment.
You’ll appreciate coverage of advanced Haskell features including programming polymorphically, working effectively with types, concurrent programming, data processing, web services, and more. Because it’s organized to make specific topics easy to find, you’ll return to this book again and again as your go-to Haskell reference.
Will Kurt : CoverGet Programming with Haskell, ISBN13 9781617293764, Paperback/eBook: 616 pages. Manning Publications (March 2018)
Book Description
Get Programming with Haskell leads you through short lessons, examples, and exercises designed to make Haskell your own. It has crystal-clear illustrations and guided practice. You will write and test dozens of interesting programs and dive into custom Haskell modules. You will gain a new perspective on programming plus the practical ability to use Haskell in the everyday world. (The 80 IQ points: not guaranteed!)
Book Description
Beginning Haskell provides a broad-based introduction to the Haskell language, its libraries and environment, and to the functional programming paradigm that is fast growing in importance in the software industry. The book takes a project-based approach to learning the language that is unified around the building of a web-based storefront. Excellent coverage is given to the Haskell ecosystem and supporting tools. These include the Cabal build tool for managing projects and modules, the HUnit and QuickCheck tools for software testing, the Scotty framework for developing web applications, Persistent and Esqueleto for database access, and also parallel and distributed programming libraries.
Cover Miran Lipovača: Learn You a Haskell for Great Good!, Paperback: 360 pages, No Starch Press (April 2011), English, ISBN: 978-1-59327-283-8
Book Description
It's all in the name: Learn You a Haskell for Great Good! is a hilarious, illustrated guide to this complex functional language. Packed with the author's original artwork, pop culture references, and most importantly, useful example code, this book teaches functional fundamentals in a way you never thought possible.
Book Description
This book shows how to encode basic theoretical physics in Haskell. The author currently uses it in a computational physics course for physics majors at Lebanon Valley College. It covers Newtonian mechanics, a little special relativity, and electromagnetic theory up to the Maxwell equations. The book
teaches Haskell to people interested in science generally, or physics specifically.
Cover Graham Hutton: Programming in Haskell, Paperback: 318 pages, 120 exercises, Cambridge University Press (September 1, 2016), English, ISBN-13: 978-1316626221
Book Description
This new edition has been extensively updated and expanded to include recent and more advanced features of Haskell, new examples and exercises, selected solutions, and freely downloadable lecture slides and example code. The presentation is clean and simple, while also being fully compliant with the latest version of the language, including recent changes concerning applicative, monadic, foldable and traversable types.
Cover Bryan O'Sullivan, Don Stewart, and John Goerzen: Real World Haskell, Paperback: 700 pages, O'Reilly, November 2008, English, ISBN-10: 0596514980, ISBN-13: 978-0596514983
Book Description
If you have a working knowledge of Haskell, this hands-on book shows you how to use the language’s many APIs and frameworks for writing both parallel and concurrent programs. You’ll learn how parallelism exploits multicore processors to speed up computation-heavy programs, and how concurrency enables you to write programs with threads for multiple interactions.
Author Simon Marlow walks you through the process with lots of code examples that you can run, experiment with, and extend. Divided into separate sections on Parallel and Concurrent Haskell, this book also includes exercises to help you become familiar with the concepts presented:
Express parallelism in Haskell with the Eval monad and Evaluation Strategies
Parallelize ordinary Haskell code with the Par monad
Build parallel array-based computations, using the Repa library
Use the Accelerate library to run computations directly on the GPU
Work with basic interfaces for writing concurrent code
Build trees of threads for larger and more complex programs
Learn how to build high-speed concurrent network servers
Write distributed programs that run on multiple machines in a network
Book Description
This book teaches functional programming as a way of thinking and
problem solving, using Haskell, the most popular purely functional
language. Rather than using the conventional mathematical examples
commonly found in other programming language textbooks, the author
draws examples from multimedia applications, including graphics,
animation, and computer music, thus rewarding the reader with working
programs for inherently more interesting applications. Aimed at both
beginning and advanced programmers, this tutorial begins with a gentle
introduction to functional programming and moves rapidly on to more
advanced topics. An underlying theme is the design and implementation
of domain specific languages, using three examples: FAL (a Functional
Animation Language), IRL (an Imperative Robot Language), and MDL (a
Music Description Language). Details about programming in Haskell
are presented in boxes throughout the text so they can be easily
referred to and found quickly.
The book's website contains source files for all programs in the text, as well as the graphics libraries to run them under Windows and Linux platforms. It also contains PowerPoint slides useful for
teaching a course using the textbook.
Book Description
The second edition of Haskell: The Craft of Functional Programming is essential reading for beginners to functional programming and newcomers to the Haskell programming language. The emphasis is on the process of crafting programs and the text contains many examples and running case studies, as well as advice an program design, testing, problem solving and how to avoid common pitfalls.
Building on the strengths of the first edition, the book includes many new and improved features:
Complete coverage of Haskell 98, the standard version of Haskell which will be stable and supported by implementations for years to come.
An emphasis on software engineering principles, encouraging a disciplined approach to building reusable libraries of software components.
Detailed coverage of the Hugs interpreter with an appendix covering other implementations.
A running case study of pictures emphasizes the built-in functions which appear in the standard prelude and libraries. It is also used to give an early preview of some of the more complex language features, such as high-order functions.
List comprehensions and the standard functions over lists are covered before recursion.
Early coverage of polymorphism supporting the "toolkit" approach and encouraging the resuse of built-in functions and types.
Extensive reference material containing details of further reading in books, journals and on the World Wide Web.
Accompanying Web Site supporting the book, containing all the program code, further teaching materials and other useful resources.
Synopsis
This books introduces Haskell at a level appropriate for those with little or no prior experience of functional programming. The emphasis is on the process of crafting programs, solving problems, and avoiding common errors.
Cover Richard Bird: Thinking Functionally with Haskell, Cambridge University Press, 2014, 354 pp., ISBN-10: 1107452643, ISBN-13: 978-1107452640.
Richard Bird is famed for the clarity and rigour of his writing. His new textbook, which introduces functional programming to students, emphasises fundamental techniques for reasoning mathematically about functional programs. By studying the underlying equational laws, the book enables students to apply calculational reasoning to their programs, both to understand their properties and to make them more efficient. The book has been designed to fit a first- or second-year undergraduate course and is a thorough overhaul and replacement of his earlier textbooks. It features case studies in Sudoku and pretty-printing, and over 100 carefully selected exercises with solutions.
Cover:
Functional programming is a style of programming that has become increasingly popular during the past few years.
Applicative programs have the advantage of being almost immediately expressible as functional descriptions; they can
be proved correct and transformed through the referential transparency property.
This book presents the basic concepts of functional programming, using the language Haskell for examples. The author
incorporates a discussion of lambda calculus and its relationship with Haskell, exploring the implications for
raparallelism. Contents: SASL for Beginners / Examples of SASL Programming / More Advanced Applicative Programming
Techniques / Lambda Calculus / The Relationship Between Lambda Calculus and SASL / Program Transformation and
Efficiency / Correctness, Equivalence and Program Verification / Landin's SECD Machine and Related
Implementations / Further Implementation Techniques / Special Purpose Hardware / The Applicative Style of
Semantics / Other Applicative Languages / Implications for Parallelism / Functional Programming in Von Neumann
Languages
Addison-Wesley, 235 pages, paperback, 1999. ISBN 0-201-59604-0
Book Description
The authors challenge more traditional methods of teaching algorithms
by using a functional programming context, with Haskell as an
implementation language. This leads to smaller, clearer and more
elegant programs which enable the programmer to understand the
algorithm more quickly and to use that understanding to explore
alternative solutions. Key features:
Most chapters are self-contained and can be taught independently from each other.
All programs are in Haskell'98 and provided on a WWW site.
End of chapter exercises throughout.
Comprehensive index and bibliographical notes.
Synopsis
The book is organised as a classic algorithms book according to topics
such as Abstract Data Types, sorting and searching. It uses a
succession of practical programming examples to develop in the reader
problem-solving skills which can be easily transferred to other
language paradigms. It also introduces the idea of capturing
algorithmic design strategies (e.g. Divide-and-Conquer, Dynamic
Programming) through higher-order functions. Target audience
The book is intended for computer science students taking algorithms
and/or (basic or advanced) functional programming courses.
Cover Jeremy Gibbons and Oege de Moor (eds.): The Fun of Programming,Palgrave, 2002, 288 pages. ISBN 0333992857.
Book description:
In this textbook, leading researchers give tutorial expositions on the current state of the art of functional
programming. The text is suitable for an undergraduate course immediately following an introduction to
functional programming, and also for self-study. All new concepts are illustrated by plentiful examples,
as well as exercises. A website gives access to accompanying software.
This 1987 book is now out of print, but it is now available online in its entirety.
Simon Peyton Jones, David Lester: Implementing Functional Languages, Paperback: 288 pages, Prentice Hall (August 1992), English, ISBN 0137219520
The book is out of print. The full sources and a PDF version are
available for free.
This book gives a practical approach to understanding the
implementations of non-strict functional languages using lazy graph
reduction. The emphasis of the book is on building working prototypes of
several functional language implementations (template- instantiation,
G-Machine, TIM, parallel G-Machine. In each case the authors provide a
complete working prototype of a particular implementation, and then lead
the reader through a sequence of improvements which expand its scope.
This enables readers to develop, modify and experiment with their own
implementations and for use as a source of practical laboratory work
material.
Now out of print, the original version is available here.
Preface:
Constructive Type theory has been a topic of research interest to computer scientists,
mathematicians, logicians and philosophers for a number of years. For computer scientists it provides
a framework which brings together logic and programming languages in a most elegant and fertile way:
program development and verification can proceed within a single system. Viewed in a different way,
type theory is a functional programming language with some novel features, such as the totality of
all its functions, its expressive type system allowing functions whose result type depends upon the
value of its input, and sophisticated modules and abstract types whose interfaces can contain logical
assertions as well as signature information. A third point of view emphasizes that programs (or
functions) can be extracted from proofs in the logic.
Cover Claudio Cesar de Sá and Marcio Ferreira da Silva: Haskell: Uma Abordagem Prática, Novatec Editora Ltda., 2006, 296 pages, ISBN 85-7522-095-0. The price is R$ 62,00 (in Reais). Language: Portuguese
This book is being published by Novatec Editora Ltda. You can access directly here.
Book description:
This book brings a comprehensive vision of Haskell language. No
knowledge in another functional programming language is expected. In
addition, no background in programming is required. The book presents
issues from basic up to an intermediate level; it also includes some
advanced aspects of Haskell. The title of the book, Haskell: Uma
Abordagem Prática, in English Haskell: A Practical Approach, is the essence of the book. The result is a text that can be used in courses of programming and paradigms languages. Finally, many practical examples can be found throughout the book.
An additional page containing comments on this book is found here:
http://www2.joinville.udesc.br/~coca/index.php/Main/PaginaDoLivroDeHaskell.
Other data as bibtex entry, cover's book in several formats, Winhugs-2001 for download, and so on. This page is Portuguese.
Cover Blas C. Ruiz, Francisco Gutiérrez, Pablo Guerrero y José E. Gallardo. Razonando con Haskell, Thompson 2004. ISBN 84-9732-277-0. Language: Spanish
Descripción El objetivo principal de este libro es el de servir como
libro de texto de las asignaturas de Programación Declarativa
correspondientes a los estudios de Informática o Ciencias de la
Computación, y otras ciencias en general ( Matemáticas, Física, etc.).
El texto es fruto de una larga experiencia docente de los autores dentro
de las distintas asignaturas que desarrollan la Programación Funcional
en distintas titulaciones de la Universidad de Málaga. Aún así, su
lectura no queda condicionada a un conocimiento previo sobre lenguajes
de programación (de computadores), ni sobre Informática. De esta forma,
el libro puede ser utilizado por todo aquel que desee tener un
conocimiento amplio sobre la Programación Funcional.
CoverPractical Haskell Programming, Minero Aoki and Nobuo Yamashita. A primer on functional programming for real world programs. In Japanese. Yen 2,940.
From the cover: Most books on data structures assume an imperative language like C or C++. However, data structures for these languages do not always translate well to functional languages such as Standard ML, Haskell, or Scheme. This book describes data structures and data structure design techniques from the point of view of functional languages. It includes code for a wide assortment both of classical data structures and of data structures developed exclusively for functional languages.This handy reference for professional programmers working with functional languages can also be used as a tutorial or for self-study. Haskell source code for the book
De pe coperta
(ro) Cartea este simultan un manual introductiv de Haskell si o carte auxiliara pentru studentii de la cursul de limbaje formale. Veti avea satisfactia cunoasterii unui limbaj modern (...) in care algoritmul de sortare Quicksort se scrie pe 6 randuri, asa cum se poate vedea de altfel si in imaginea de pe coperta I. (...) Cartea cuprinde o serie de capitole folosite la Universitatea Bacau in calitate de auxiliare de laborator la disciplina Limbaje Formale si Automate.
(en) This book is simultaneously a manual of Haskell and an auxiliary book for the students of the FLA course (Formal Languges and Automata). You will be satisfied by this modern language,Haskell. Why ? Using Haskell the Quicksort algorithm can be writen on 6 lines (or less), as you can see on the cover. And that's not all ... This book is used at Bacau State University, Romania.
Book Description
Every business and organization that collects data is capable of tapping into its own data to gain insights how to improve. Haskell is a purely functional and lazy programming language, well-suited to handling large data analysis problems. This book will take you through the more difficult problems of data analysis in a hands-on manner.
This book will help you get up-to-speed with the basics of data analysis and approaches in the Haskell language. You'll learn about statistical computing, file formats (CSV and SQLite3), descriptive statistics, charts, and progress to more advanced concepts such as understanding the importance of normal distribution. While mathematics is a big part of data analysis, we've tried to keep this course simple and approachable so that you can apply what you learn to the real world.
By the end of this book, you will have a thorough understanding of data analysis, and the different ways of analyzing data. You will have a mastery of all the tools and techniques in Haskell for effective data analysis.
Book Description
Haskell Cookbook provides recipes that start by illustrating the principles of functional programming in Haskell, and then gradually build up your expertise in creating industrial-strength programs to accomplish any goal. The book covers topics such as Functors, Applicatives, Monads, and Transformers. You will learn various ways to handle state in your application and explore advanced topics such as Generalized Algebraic Data Types, higher kind types, existential types, and type families. The book will discuss the association of lenses with type classes such as Functor, Foldable, and Traversable to help you manage deep data structures.
Cover Nishant Shukla: Haskell Data Analysis Cookbook, Paperback: 334 pages, Packt, June 2014, English, ISBN-10: 1783286334, ISBN-13: 978-1783286331
Book Description
This book will take you on a voyage through all the steps involved in data analysis. It provides synergy between Haskell and data modeling, consisting of carefully chosen examples featuring some of the most popular machine learning techniques.
You will begin with how to obtain and clean data from various sources. You will then learn how to use various data structures such as trees and graphs. The meat of data analysis occurs in the topics involving statistical techniques, parallelism, concurrency, and machine learning algorithms, along with various examples of visualizing and exporting results. By the end of the book, you will be empowered with techniques to maximize your potential when using Haskell for data analysis.
The GitHub public repository contains over 130 practical recipes to accompany every chapter of the book. Use it as a Swiss Army Knife of algorithms and code snippets. Try a recipe a day, like a kata for your mind.
Book Description
Haskell, with its power to optimize the code and its high performance, is a natural candidate for high performance programming. It is especially well suited to stacking abstractions high with a relatively low performance cost. This book addresses the challenges of writing efficient code with lazy evaluation and techniques often used to optimize the performance of Haskell programs.
Learn to use parallelism and explore the concept of streaming. This book demonstrates the benefits of running multithreaded and concurrent applications. Next it will guide you through various profiling tools that will help you identify performance issues in your program.
Ryan Lemmer: CoverHaskell Design Patterns, Paperback: 166 pages, Packt, November 2015, English, ISBN-10: 1-783-98872-X, ISBN-13: 9781783988723
Book Description
Design patterns and idioms can widen our perspective by showing us where to look, what to look at, and ultimately how to see what we are looking at. At their best, patterns are a shorthand method of communicating better ways to code (writing less, more maintainable, and more efficient code).
This book starts with Haskell 98 and through the lens of patterns and idioms investigates the key advances and programming styles that together make "modern Haskell". Your journey begins with the three pillars of Haskell. Then you'll experience the problem with Lazy I/O, together with a solution. You'll also trace the hierarchy formed by Functor, Applicative, Arrow, and Monad. Next you'll explore how Fold and Map are generalized by Foldable and Traversable, which in turn is unified in a broader context by functional Lenses. You'll delve more deeply into the Type system, which will prepare you for an overview of Generic programming. In conclusion you go to the edge of Haskell by investigating the Kind system and how this relates to Dependently-typed programming.
James Church: CoverLearning Haskell Data Analysis, Paperback: 198 pages, Packt, May 2015, English, ISBN-10: 1-784-39470-7, ISBN-13: 9781784394707
Book Description
This book provides you with the skills to handle large amounts of data, even if that data is in a less than perfect state. Each chapter in the book helps to build a small library of code that will be used to solve a problem for that chapter.
The book starts with creating databases out of existing datasets, cleaning that data, and interacting with databases within Haskell in order to produce charts for publications. It then moves towards more theoretical concepts that are fundamental to introductory data analysis, but in a context of a real-world problem with real-world data. As you progress in the book, you will be relying on code from previous chapters in order to help create new solutions quickly. By the end of the book, you will be able to manipulate, find, and analyze large and small sets of data using your own Haskell libraries.
Ce livre a pour objectif d’initier à la programmation fonctionnelle en général et au langage Haskell en particulier ; ceci de façon réellement exploitable. Il en présente les principales notions ainsi que différentes applications (intelligence artificielle pour des jeux, application web, convertisseur de fichiers textes, etc.). Enfin, il indique comment mettre en oeuvre le style fonctionnel dans des langages comme C++ et JavaScript.
Foundations
Cover
Types and Programming Languages by Benjamin C. Pierce. 645 pages, The MIT Press, (February 1, 2002), English. ISBN 0262162091
From the cover:
A type system is a syntactic method for automatically checking the absence of certain erroneous behaviors by classifying program phrases according to the kinds of values they compute. The study of type systems--and of programming languages from a type-theoretic perspective-has important applications in software engineering, language design, high-performance compilers, and security. This text provides a comprehensive introduction both to type systems in computer science and to the basic theory of programming languages. The approach is pragmatic and operational; each new concept is motivated by programming examples and the more theoretical sections are driven by the needs of implementations. Each chapter is accompanied by numerous exercises and solutions, as well as a running implementation, available via the Web. Dependencies between chapters are explicitly identified, allowing readers to choose a variety of paths through the material. The core topics include the untyped lambda-calculus, simple type systems, type reconstruction, universal and existential polymorphism, subtyping, bounded quantification, recursive types, kinds, and type operators. Extended case studies develop a variety of approaches to modeling the features of object-oriented languages.
From the cover:
The study of type systems for programming languages now touches many areas of computer science, from language design and implementation to software engineering, network security, databases, and analysis of concurrent and distributed systems. This book offers accessible introductions to key ideas in the field, with contributions by experts on each topic. The topics covered include precise type analyses, which extend simple type systems to give them a better grip on the run time behavior of systems; type systems for low-level languages; applications of types to reasoning about computer programs; type theory as a framework for the design of sophisticated module systems; and advanced techniques in ML-style type inference. Advanced Topics in Types and Programming Languages builds on Benjamin Pierce's Types and Programming Languages (MIT Press, 2002); most of the chapters should be accessible to readers familiar with basic notations and techniques of operational semantics and type systems -- the material covered in the first half of the earlier book. Advanced Topics in Types and Programming Languages can be used in the classroom and as a resource for professionals. Most chapters include exercises, ranging in difficulty from quick comprehension checks to challenging extensions, many with solutions.
Foreword of the book (en):
I am delighted to introduce this book on the use of monads in Haskell as a way of structuring interpreters. In the early days, Haskell's most distinctive feature was lazy evaluation. Laziness forced us to take a pure approach to input/output, which meant that Haskell's I/O was initially rather weak. This weakness ultimately proved a strength, however, because it led us to the discovery that monads were not just an abstract mathematical concept, but were immediately applicable as a powerful program structuring mechanism.
Monadic programming is not just to do with input/output: it is much more powerful. That is why I am pleased to see this book, which describes in some detail how to write a language interpreter using a monadic approach.
In retrospect, the discovery of monads as a practical programming pattern is one of Haskell's most substantial contributions to the world of programming -- and it is one that you will share if you work through this book.
I am also very happy to see Haskell growing in popularity among our brothers and sisters in Eastern Europe, and in Romania in particular. Enjoy!
Simon P.J.
Video Description
This video is specifically aimed at anybody who knows the essentials of the Haskell programming language and who is interested in moving onto developing real programs that will make use of file I/O, command-line parsers and various third-party packages. This course will take you through the complete journey from writing your first Haskell program to getting familiarized with Haskell and all its functionalities.
Richard Cook : CoverWriting Haskell Programs (Video), ISBN13 9781787283329, Video Length 2 hours and 43 minutes. Packt (May 2017)
Video Description
This course builds on the foundations provided by the Fundamentals of Practical Haskell Programming course and helps to bridge the gap between introductory and advanced Haskell by teaching you how to manage and develop complex programs. We'll also dispel the myth that Haskell is only useful for toy programs.
Video Description
This video course will take you through all the concepts of functional programming (FP) and Haskell language. First, we’ll address all the problems with FP and Haskell. Then we’ll help you distinguish the difference between FP and Haskell. We’ll then guide you through Haskell in depth. We’ll help you create your first Haskell program. You’ll then be given a brief insight into GHCi (Glasgow Haskell Compiler). Later we’ll explore the different values, expressions and programs in Haskell in depth.
Course Description
This course will introduce the basic concepts of Haskell and move on to discuss how Haskell can be used to solve the issues by using the real-world data.
The course will guide you through the installation procedure, after you have all the tools that you require in place, you will explore the basic concepts of Haskell including the functions, and the data structures.
With a good hold on the basics of Haskell and data analysis, you will then be introduced to advanced concepts of data analysis such as Kernel Density Estimation, Hypothesis testing, Regression analysis, text analysis, clustering, Naïve Bayes Classification, and Principal Component Analysis.
Video Description
In this course, you’ll discover different ways to structure interactions between the program and the outside world. We’ll look at some subtler aspects of the IO monad, such as lazy IO and unsafePerformIO. In addition to the IO monad, we’ll also check out two other structured forms of interaction: streaming libraries and functional reactive programming.
Then we explore parallel, concurrent, and distributed programming. Thanks to purity, Haskell is especially well-suited for the first two, and so there are a number of approaches to cover. As for distributed programming, we focus on the idea of splitting a large monolithic program into smaller microservices, asking whether doing so is a good idea. We’ll also consider a different way of interacting with other microservices, and explore an alternative to microservices.
Video Description
In this video, you will be guided on how to find correlations in data, as well as multiple dependent variables. You will be given a theoretical overview of the types of regression and we’ll show you how to install the LAPACK and HMatrix libraries. By the end of the first part, you’ll be familiar with the application of N-grams and TF-IDF.
Once you’ve learned how to analyze data, the next step is organizing that data with the help of machine learning algorithms. You will be briefed on the mathematics and statistical theorems such as Baye’s law and its application, as well as eigenvalues and eigenvectors using HMatrix.
By the end of this course, you’ll have an understanding of data analysis, different ways to analyze data, and the various clustering algorithms available. You’ll also understand Haskell and will be ready to write code with it.
Video Description
This video would begin with the fundamentals and building blocks of Haskell programming language with special emphasis on functional programming. It will be covering how Haskell variables, syntax work alongwith Haskell datatypes and functions.
You will learn how to solve programming problems while creating an application with hands-on experience. You will then move on to learning writing expressions and high-order functions.
At the end of the video, you will be able to build a complete application with Haskell alongwith learning the important functionalities.
Course Description
Data analysis is part computer science and part statistics. An important part of data analysis is validating your assumptions with real-world data to see if there is a pattern, or a particular user behavior that you can validate. This video course will help you get up to speed with the basics of data analysis and approaches in the Haskell language. You'll learn about statistical computing, file formats (CSV and SQLite3), descriptive statistics, charts, and onto more advanced concepts like understanding the importance of normal distribution. Whilst mathematics is a big part of data analysis, we’ve tried to keep this course simple and approachable so that you can apply what you learn to the real world.
Book Description
Functional Ikamusume book series provides a forum for researchers, developers, and anime-watchers to publish their latest work, articles, and “mousou (妄想)” on the design, implementations, principles, and uses of functional programming and Ikamusume. The book series covers the entire spectrum of work, from practice to theory, from frank introduction of functional programming to latest research work, from Ikamusume with some functional flavor to functional programming with some Ikamusume flavor. Let’s enjoy writing articles on functional programming in frank “geso” style de-geso!!
Past books are written entirely in Japanese, and books are planned to be sold in Japan, but we also accept articles in English. For more information on functional Ikamusume, see the links above (all in Japanese), or ask @xhl_kogitsune or "other members" on twitter, or xhlkogitsune on Skype. You don’t have to be worried about what is Functional Ikamusume —— she is just Ikamusume who loves functional programming, as you love it.
If you are interested in writing Functional Ikamusume articles, please contact xhlkogitsune on Skype or the authors on twitter. You can use Japanese or English for discussion. A text chat room is on Skype, and I’ll invite you to the chat room. While the chat is currently in Japanese, most participants can read/write English.