Haskell is an advanced purely functional programming language with strong static type system and elegant mathematical background. It is being increasingly used by organisations like Facebook and Kaspersky Lab along with various companies in finance, blockchain, advertising, data science, scientific computing and more. In this course we will explore practical functional programming in Haskell.


In the first part of this course students will learn the necessary Haskell basics to easily write practical programs, covering higher-order functions, parametric polymorphism, lazy evaluation, algebraic data types and type classes. The second part of the course will introduce some of the abstractions commonly used in functional software design, such as monoids, functors and monads. The last few weeks will cover several advanced topics.

Evaluation will be based on class participation, programming assignments, and an open-ended final project that is completed individually or in small teams.