We will work through Haskell Programming from First Principles (aka the "Haskell Book") by Christopher Allen and Julie Moronuki. The only prerequisites for participating are this book, a computer, and your person. An open mind is also recommended. No prior experience with Haskell, functional programming, or coding in general is required.
To prepare for your first visit, please do the following:
-
Join the Slack channel. All announcements pertaining to this study group will be sent out via Slack. On Slack, look for the
#haskell-study-group
channel. -
Have your own copy of the book. You will need your own copy on your own machine so you can work with the PDF and your terminal open side-by-side. This book was independently researched, written, and published by two Haskell developers working in their spare time to support education in functional programming.
-
Install Stack, the Haskell project development tool. If you are familiar with package managers like npm, pip, and apt, Stack is similar. You needn't show up already an expert, but do at least learn the basics. If you want to know everything, though, you could watch this video. The most important thing: whatever you do, do not install the Haskell Platform.
-
Set up a project environment for your practice code, and familiarize yourself with GHC and GHCi. You don't need to do much more than create a directory for your code and make sure you know how to run the GHC compiler on your source files and GHCi when you need a REPL.
Participants in the study group will be expected to model and reinforce a culture of accountability. This entails everyone abiding by the norms of a supportive and rigorous classroom environment. Each week, you should try as much as possible the following:
- Doing all the reading.
- Typing in all the code.
- Attempting all the exercises.
These expectations are not meant to make your life miserable but to provide a framework for your success. If you actually want to learn Haskell, consistency is the key—as with anything else. Since we'll be learning Haskell together in this group, it is essential that you work through each chapter on your own first so that you know what you need help with and what you understand well enough to teach others. If you get stuck on a problem, keep moving, but do not just skip the exercises entirely.
If you are a complete beginner to functional programming or for whatever reason have trouble installing Haskell on your computer, don't worry about it! Ask in the study group channel and we'll help you figure it out. Fortunately, you don't even need a computer to work through Chapter 1—just pen, paper, and patience. So make sure you at least do that much, even if you require tech support.
By participating in this study group, you implicitly agree to conduct your coding as follows:
Each week, prior to the group meeting, you will try to complete the assigned reading and attempt to complete the coding exercises to the best of your ability. If you do not make a genuine effort to complete your work, for whatever reason, you will struggle in the group discussion that week. If you find yourself struggling with the exercises, you should seek help in the slack channel, or from the wider web.
In addition to the above, all study group participants are expected to make their best effort at being decent human beings.
The Recurse Center has a useful set of social rules that you should consider in effect for our online discussion, too.
We will work through all the of the Haskell Book over the course of 20 weeks. Each set of 4 weeks will teach you something fundamental.
This is not a class, however, so do not come expecting a lecture. Instead, you will have the opportunity to review your work and to discuss concepts and exercises that gave you difficulty when working through the book on your own.
You are encouraged to adhere as closely to this regular, weekly schedule as you are able so as to maintain your momentum. That said, if life gets in the way, so be it: but do your best to catch up, and avoid skipping any material as each chapter builds on the last. We can always discuss exercises on Slack.
See the resources sub-directory in this repo for materials used during study weeks.
(Week 1..4)
Week 1. Introduction. Lambda calculus. Haskell Book
- Chapter 1
Week 2. Getting started with Haskell.
- Chapters 2 and 3
Week 3. Basic datatypes & Types
- Chapters 4 and 5
Week 4. Typeclasses.
- Chapter 6
- General review and look ahead
(Week 5..8)
Week 5. Functional patterns. Working with recursion.
- Chapters 7 and 8
Week 6. Lists and folding lists.
- Chapters 9 and 10
Week 7. Algebraic datatypes & Adversity
- Chapters 11 and 12
Week 8. Projects and Modules. Testing with QuickCheck.
- Chapter 13 and 14
- General review and look ahead
(Week 9..12)
Week 9. Monoid and Semigroup.
- Chapter 15
Week 10. Functor.
- Chapter 16
Week 11. Applicative.
- Chapter 17
Week 12. Monad. How to apply structure to your code. Conclusion.
- Chapter 18 and 19
- General review and look ahead
(Week 13..16)
Week 13. Foldable & Traversable
- Chapter 20 & 21
Week 14. Reader, State
- Chapter 22 & 23
Week 15. Parser combinators
- Chapter 24.
Week 16. Composing types, Monad transformers
- Chapter 25
- Chapter 26
- General review and look ahead
(Week 17..20)
Week 17. Nonstrictness
- Chapter 27
Week 18. Basic Libraries
- Chapter 28
Week 19. IO & When Things Go Wrong
- Chapter 29 & 30
Week 20. Final Project
- Chapter 30
The following are useful websites, educational supplements, and other reference materials pertinent to working with Haskell. Submit a pull request to add more.
- Haskell Language Home Page - your portal to the Haskell universe (preferred to haskell.org)
- Stackage - search for Haskell modules or functions (Google has a hard time deciphering the funny operators, so use this instead)
- Haskell is easy - a curated list of Haskell libraries
- #haskell and #haskell-beginners - IRC channels on freenode
- Haskell on reddit
- Haskell on Stack Overflow
- How I Start: Haskell - how to set-up a new Haskell project