Functional Programming

Title Functional Programming (51400)
Quarter Spring 2018
Instructor Lamont Kenneth Samuels (



This course presents the functional programming paradigm, based on the idea of functions as first-class values that can be computed and operated on like other data. Functional languages provide great power of expression while maintaining simplicity, making it easier to write correct and maintainable software. Functional programming has gradually found new applications in areas like finance, telecommunications, and graphics. The essential feature of treating functions as values has also been added to a broad range of conventional languages, such as Python, C++, Java, Apple's Swift and Google's Go language. The course will use the Haskell language based on its representing a purely functional language and its large community support that helps with writing Haskell programs easily. After learning the basic elements of these languages, we will explore functional programming techniques that can be exploited in many areas of application. In particular, we will examine how FP features are used in more modern languages and libraries such as C++, Java, Elm, and React libraries and how they are used in real-world settings. We will briefly compare the functional paradigm with the related paradigm of object oriented programming. If time permits then we will explore more advanced topics including concurrent functional programming and functional reactive programming.


Topics that will be explored in the course will include the following:
  • Introduction to Haskell and the ghci interpreter
  • Basic Haskell types and functions
  • Advance function topics: guards, pattern matching and recursion
  • Lists, strings and tuples
  • Types and polymorphism
  • Higher order functions on lists: map. filter, list comprehension
  • Lazy evaluation
  • Type classes
  • User defined data structures: lists, queues, trees
  • Input/output in Haskell
  • Functional Programming vs Object Oriented Programming
  • Functional Programming in modern languages and real-world settings


 The course will include a mixture of (4-5) bi-weekly homework assignments and two exams.


 This course will not have a required textbook. Along with the lecture notes, students may nd the following
references helpful in understanding the course material:
  • Learn You a Haskell for Great Good! by Miran Lipovaca
  • Programming in Haskell by Graham Hutton (2nd Edition)
  • Real World Haskell by Bryan O'Sullivan, John Goerzen, and Don Stewart
  • Haskell Programming : First Principles by Christopher Allen and Julie Moronuki
Prerequisites (Courses)

Core Programming

Students with an existing CS background may take this class concurrently with Core Programming with consent from the MPCS.

Prerequisites (Other)


Core Systems.

May also be used as a Core Programming class with consent from the MPCS.


Tuesday 5:30-8:30pm


Ryerson 251