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 it 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 permit then we will explore more advanced topics including concurrent functional programming and functional reactive programming.
The following information below about the course is subject to change.
Lectures | Monday 5:30pm–8:30pm, Eckhart Hall 207 |
Communication |
We'll use Piazza for general discussion and questions about course material. Piazza is the best place to get help quickly. The TA's and I will monitor Piazza as frequently as possible and often be able to answer immediately. Students are encouraged to help their peers on Piazza by contributing when it is convenient. |
Textbook |
This course will not have a required textbook; although, for those students who may find it helpful to know
the topics we will dicuss each week, readings will come from the text:
|
Course Software |
Stack (Haskell Project building tool): https://docs.haskellstack.org/en/stable/README/ Haskell platform: https://www.haskell.org/platform/ Git: http://git-scm.com/downloads/ |
Getting Help |
I will be available during office hours. The pace of this course is rapid, so please email me or come to office hours if you feel you're falling behind or need help. |
NOTE : Homework assigned and due dates are subject to change with notice.
Exam | Length | Exam Date |
---|---|---|
Midterm Exam | 90 minutes | Monday October 23rd |
Final Exam | 90 minutes | Monday November 27th |
There are no make-up exams in this class. There also will not be any earlier exams taken unless due to extraordinary circumstances such as an medical emergency.
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
Advance Haskell topics: Applicative, Functor, Moniod, Monads
Input/output in Haskell
Functional Programming vs Object Oriented Programming
Functional Programming in modern languages and real-world settings
A detailed description of when each topic will be discussed is on the course schedule page.
Weight | |
---|---|
Project #1 | 3% |
Project #2 | 3% |
Project #3 | 6% |
Project #4 (2 weeks) | 9% |
Project #5 (2 weeks) | 12% |
Final Project | 17% |
Midterm exam | 20% |
Final exam | 25% |
Class participation | 5% |