Chapter 1: Function
- Pure functions
- Polymorphic functions
- Higher-order functions
- Recursion
- Memoization
Chapter 2: Type
- Cardinality
- Algebra of types
- Types and Tests, Valid Implementation Count (VIC)
- Parametricity
- Logic and types
Chapter 3: Typeclass
- Different implementations of ad-hoc polymorphism
- Eq, Monoid
- Typeclass laws
- Instance uniqueness, location
- Typeclass hierarchy with Semigroup, CommutativeMonoid
- Use case with distributed computing (e.g. Spark)
- Higher kinded typeclass with Foldable
- Typeclass abuses
Chapter 4: Functors WIP
- Functor, Applicative, Monad
- Combining effects
- Typeclass consistency
- Traverse
- Typeclass granularity
Each chapter has:
- a set of slides (linked above) located at
docs/$chapter.html
- a scala object containing all exercises located at
exercises/src/main/scala/exercises/$chapter/$chapterExercises.scala
- a scala object containing all answers located at
exercises/src/main/scala/answers/$chapter/$chapterAnswers.scala
- two test suites (one for exercises, one for answers) located at
exercises/src/test/scala/exercises/$chapter/$chapterTest.scala
Start each chapter with the slides, at some point you will be prompted to work on some exercises. Do the exercises and check your answers are correct by running the tests for this chapter. Finally, go back to the slides and repeat the process. If you have any question, please ask them on gitter.
sbt "testOnly $CHAPTER*ExercisesTest"
For example for chapter 1
sbt "testOnly function*ExercisesTest"
Yes, the material is open source and it uses a permissive licence CC-BY-SA-4.0. However, the slides and exercises are currently made to be run by a trainer. Eventually, we aim to make this course self-study with online videos but it is not likely to happen before mid 2020.
We do encourage people who enjoy the course to make a donation using patreon.