Introduction
CMSC 388F will expose you to elegant examples of functional programming. These are programs that demonstrate useful programming techniques and exemplify good design. The best writers read the masters—so too should programmers.
The only background required from you is familarity with the fundamentals of functional programming. In particular, you should be comfortable with recursion, programming without mutable state, and higher-order functions. CMSC 330 is sufficient. If you’ve taken CMSC 498V or have more experience with functional programming, we hope you will still learn plenty.
The course in split in half by spring break. Before the break, we will learn the basics of Haskell and four important abstractions: monoids, functors, applicative functors, and monads. We emphasize intuition over formalism, example over proof. After the break we will see these abstractions crop up in many neat applications. Everything you see in lecture, and much more, will be posted on the class web page. You need not take notes.
Grades will be determined by four programming assignments and one final project. The programming assignments will be automatically graded by the Submit Server.All tests will be semi-public. They are “semi-public” in the sense that you will not be given any test cases, but you can submit as many times as you want. For the final project, you and a group of your peers will write your own functional pearl. This means you will chose a problem, apply functional techniques, and produce an elegant solution. You will be required to submit your program accompanied by an exposition of your solution. The last day of class will be devoted to presenting these pearls.
Over the course of the semester we hope you will learn a lot and have fun too. See you soon!