Functional Programming Using Haskell
A practical course on developing applications in a purely functional programming language
Learn Functional Programming using Haskell
When working on large codebases with many moving parts, I never felt comfortable making changes because it was almost impossible to know what I could alter without breaking the entire application. Modifying one function might cause a cascade of issues or break something in a subtle way that I wouldn't even notice for weeks.
Programming that way just isn't very fun, and sometimes it even made me feel like I wasn't very good at it or I wasn't using the right design patterns. Then I discovered functional programming.
As I studied functional programming I found that, even when writing code in traditionally object-oriented languages, using functional principles made things that had previously been verbose and error-prone simple, beautiful and flexible.
For example, six months ago I wrote a production web service in Haskell to enable a wide variety of content submissions in a web application. Later, I needed to make a change to a codebase I hadn't touched in months!
Because the code was written in a purely functional programming language, I was able to easily make the changes in a couple of minutes without any mental gymnastics and I was confident that the changes were correct. That's the power of functional programming and I want to share it with you.
What is Functional Programming?
The core of functional programming really boils down to a few basic, clearly defined concepts. Those concepts not only apply to functional languages like Haskell (which we'll be learning in), but thinking in this new way lets you write the type of software people idealize, no matter what language it's in.
This course breaks down those concepts, step by step, and gives you some challenges to complete in order to cement those principles. By the end you'll be able to write more powerful, more elegant, more functional code - even if you're going to go back to work tomorrow writing Python or JavaScript.
Watch a Sample - Referential Transparency
Start Writing Code
Instead of endless theory, each lesson introduces a concept and quickly moves to practical examples and exercises so you can get comfortable using these new techniques. We'll also teach you about the tools you'll need in order to create, maintain, and run your applications.
LambdaSchool students are invited into a members-only Slack community where we'll organize into study groups, help each other when we're stuck, and even meet up.
Group Code Reviews
Most lessons contain practice code for you to write. In the LambdaSchool community we'll be frequently going over samples of code to see each other's and to help each other improve. We learn more by having the actual output of our work critiqued by others, and by seeing how others approach the same problem.
Course Format
The course will be made available on several platforms, and will be available on mobile and desktop, as well as downloadable should you want to access them offline.
We'll also make full text transcripts available so you can review and study when you don't want to watch the videos.
What's In The Course
The course will cover the basic elements of FP and Haskell. The syllabus may change, but it will roughly be:
- Tooling and using the REPL
- Syntax (functions, guards, recursion)
- Types
- ADTs
- Type Classes
- Functor
- Applicative
- Monad
The latter half of the course will make extensive use of examples from web programming to illustrate the usefulness and ubiquity of these general concepts.
Your Instructor
Course Curriculum
-
StartIntro to Haskell Syntax (2:02)
-
StartType Declarations (3:43)
-
StartFunction Syntax (1:24)
-
StartType Declarations for Functions (1:41)
-
StartInfix Notation & Operators (5:57)
-
StartAssociativity (3:25)
-
StartEvery Function Takes a Single Argument (4:30)
-
StartPartial Application (7:33)
-
StartHigher-order Functions (4:50)
-
StartLambda Abstractions
-
StartFunction Composition
-
StartPattern Matching
-
Startif, guards, and case expressions
-
Startwhere & let bindings