Haskell and Functional Programming course for complete beginners.
👩🏫 The course was created in 2022 but it's still active and constantly improving.
Course learning materials comprises:
- 🎥 Four 1-hour lectures on YouTube
- 🖼 Slides
- 🧩 Practical exercises and Haskell installation instructions
The course is entirely free and includes two particularly interesting features:
- 🆙 Review of your solutions to exercises!
- 📜 A certificate after successful completion!
You can solve exercises, and I'm (Dmitrii Kovanikov) going to provide review to your solutions, suggesting improvements and alternative ways to solve tasks using idiomatic FP.
Below you can find the plan of each individual lecture with the corresponding links to learning materials.
- What is Functional Programming?
- FP concepts
- Haskell features
- Haskell toolchain: GHC, GHCi, ghcup, cabal, hls
- How to install Haskell?
- GHCi
- Arithmetic expressions
- Comparison operators
- Boolean expressions
- Calling functions
- Types
:t
command in GHCi- Types of booleans, numbers and functions
- Lists and operations with them
- Prepending, concatenation
- Standard list functions
- Ranges
- Laziness
- String
- Syntax constructions
- Defining our own functions
- packages, modules, imports
if-then-else
- guards
let-in
where
- Immutability
- Recursion
- Higher-Order Functions (HOF)
- Functions as first-class values
- Lambda functions
- Partial application
map
,filter
, etc.
🎞 Slides: https://slides.com/haskellbeginners2022/lecture-1
📽 Video: Haskell Beginners 2022: Lecture 1
- Pattern-matching
- Top level
case-of
- List patterns
- Recursion and pattern matching
- Pattern matching pitfalls
- Totality
- Tuples
- Algebraic Data Types
- Product types
- Sum types
- Data types in Haskell
data
- Simple product types
- Records
- Enumerations
- Simple sum types
- Recursive data types
type
newtype
- Polymorphism
- Parametric polymorphism
- Types of standard functions
- Hoogle
- Polymorphic data types
- Standard polymorphic data types
- Eta-reduction
- Function composition: dot operator
(.)
🎞 Slides: https://slides.com/haskellbeginners2022/lecture-2
📽 Video: Haskell Beginners 2022: Lecture 2
- Parametric polymorphism vs Ad-hoc polymorphism
- Typeclasses
class
instance
- Default methods
{-# MINIMAL #-}
- Small typeclasses vs Big typeclasses
- Language Extensions
{-# LANGUAGE InstanceSigs #-}
- Standard typeclasses
Eq
- Haskell Equality Table
Ord
Num
deriving
- Stock derivable typeclasses
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
- Algebraic typeclasses
Semigroup
Monoid
- Laws
- Kinds
Functor
- Folds
foldr
foldl
foldl'
foldr
vsfoldl'
Foldable
- Strict and Lazy evaluation
- Lazy evaluation
- Tail Call Optimization (TCO)
- Equational reasoning
{-# LANGUAGE BangPatterns #-}
🎞 Slides: https://slides.com/haskellbeginners2022/lecture-3
📽 Video: Haskell Beginners 2022: Lecture 3
- Monad example
andThen
forMaybe
,Either
and list
- Monad as programming pattern
Monad
- The typeclass
- Instances
- Laws
- Usage example
- FAMily:
Functor
,Applicative
,Monad
- Purity
- Why Purity + Laziness is a problem for side effects?
IO
- Why does IO require a monad?
String
vsIO String
getLine
putStrLn
Main
andmain
- Then operator:
>>
do
-notation- Cabal
- Packages
build-depends
- Functional Core, Imperative Shell
🎞 Slides: https://slides.com/haskellbeginners2022/lecture-4
📽 Video: Haskell Beginners 2022: Lecture 4
After you've finished the course, you may be interested in the following resources to continue your FP and Haskell journey:
- Haskell Knowledge Map: To discover new topics for studying and find your unique learning path 🗺
- Learn Haskell by building a blog generator: A project-based course that teaches pragmatic Haskell by building a blog generator from scratch.
- Haskell in Depth: A book about intermediate Haskell topics such as Monad Transformers, metaprogramming, testing, logging and performance analysis.
- Functional Design and Architecture : Design patterns and architectures for building production quality applications using functional programming, with examples in Haskell and other FP languages.
- Haskell Study Plan: More links on different topics and examples to real-world Haskell projects.
Below is the link to the original course announcement: