Functional Programming Abstractions
These notes form an introductory course on functional programming using the Haskell programming language, based on Stanford’s CS43. They are intended to briefly present the necessary syntax and basic concepts (which are covered elsewhere in much greater depth) and focus on further theoretical exposition and examples. They are written by Adithya Ganesh and Isaac Scheinfeld, under the advising of Jerry Cain. Special thanks to Allan Jiang, co-creator of CS43.
Note that since this is the first year this material is being taught in CS43, this page will be updated throughout the course with new material.
Background and Basics
Why Haskell?: An overview of Haskell’s defining features, with brief examples.
Getting Set Up: One way to set up a Haskell environment with stack, as well as some options for minimal tooling.
Introduction to Haskell: Expressions, values, and types.
Higher Order Functions: Functions that operate on other functions, generalizing basic functions, and defining
Folds, Scans, and Laziness: Examining the many ways to process lists.
Type Design Patterns
Algebraic Datatypes: Defining and using types in Haskell, and the basics of type algebra.
Typeclasses: Using, writing, and deriving typeclasses, and the power of polymorphism.
Semigroup and Monoid: Abstracting compositional structures.
Functor and Applicative: Lifting function application to a new level.
Monad: It isn’t that complicated.
Idris and Dependent Types