This module is for students that already have some programming skills. Students will learn about the two main programming paradigms: imperative programming and functional programming. Since most introductory programming courses teach imperative programming, this module will focus on the functional paradigm. Students will learn how to program in Haskell, a popular functional programming language. They will learn how to formulate programs in a functional way, and the common techniques and idioms that are used to solve problems in functional programming.