MPCS 51400 Functional Programming (Winter 2019)

Section 1
Instructor(s) Kenneth Samuels, Lamont (lamonts)
Location JCL 298
Meeting Times Wednesday 5:30pm - 8:30pm
Fulfills Core Systems Elective



Course description originally written by David MacQueen and slightly modified by Lamont 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

Course Prerequisites

Core Programming

Other Prerequisites

Overlapping Classes

This class is scheduled at a time that conflicts with these other classes:

  • MPCS 51200-1 -- Introduction to Software Engineering
  • MPCS 51030-1 -- iOS Application Development