In this course, we will study functional programming, and will learn
how to take advantage of the features of modern typed functional
programming languages. We will study in depth the notions of algebraic
data types, higher-order functions, polymorphism, and
side-effects. The practice sessions will be done in Haskell, but
concepts presented in the course can be applied in many other
languages such as OCaml, SML or Python.

Prerequisites: CSE201 and CSE203