Are you ready to embark on a magical journey that will forever transform your view of programming?

(Image source:

Basic Information

Instructor: Yao Li

Office: FAB 115-07

Office Hours: Tuesday/Wednesday 13:30-14:30 and by appointment, in person or via Zoom

Prerequisite: CS 302: Programming Methodologies and Software Implementation

Syllabus: Here

Course Description

If you are paying attention to the recent evolution of today’s mainstream programming languages, you will find an emergence of features adapted from functional programming languages. Why is this happening? What is special about functional programming? Is there something that one can learn from functional programming paradigm that can make you a better programmer?

In this course, you will learn the key ideas behind functional programming that make it powerful, via a programming language called Haskell. I will show you how functional languages can help you write readable, modular, and efficient code.

No prior knowledge of Haskell or functional programming is required to take this class.

Major Topics

  • Abstraction, abstraction, and abstraction
  • Algebraic data types and recursion
  • Polymorphism
  • Higher-order functions
  • Universal property
  • Equational reasoning
  • Monads and applicative functors
  • Lazy evaluation
  • Type checking
  • Property-based testing


No textbook required. However, if you are interested in getting a textbook for reference, the course materials are mostly based on Programming in Haskell by Graham Hutton and Real-World Haskell by Bryan O’Sullivan, Don Stewart, and John Goerzen.