CMSC 388F will expose you to ele­gant exam­ples of func­tional pro­gram­ming. These are pro­grams that demon­strate use­ful pro­gram­ming tech­niques and exem­plify good design. The best writ­ers read the mas­ters—so too should pro­gram­mers.

The only back­ground required from you is fami­lar­ity with the fun­da­men­tals of func­tional pro­gram­ming. In par­tic­u­lar, you should be com­fort­able with recur­sion, pro­gram­ming with­out muta­ble state, and higher-order func­tions. CMSC 330 is suf­fi­cient. If you’ve taken CMSC 498V or have more expe­ri­ence with func­tional pro­gram­ming, 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 impor­tant abstrac­tions: monoids, func­tors, applica­tive func­tors, and mon­ads. We empha­size intu­ition over for­mal­ism, exam­ple over proof. After the break we will see these abstrac­tions crop up in many neat appli­ca­tions. Every­thing you see in lec­ture, and much more, will be posted on the class web page. You need not take notes.

Grades will be deter­mined by four pro­gram­ming assign­ments and one final project. The pro­gram­ming assign­ments will be auto­mat­i­cally graded by the Sub­mit Server.All tests will be semi-pub­lic. They are “semi-pub­lic” in the sense that you will not be given any test cases, but you can sub­mit as many times as you want. For the final project, you and a group of your peers will write your own func­tional pearl. This means you will chose a prob­lem, apply func­tional tech­niques, and pro­duce an ele­gant solu­tion. You will be required to sub­mit your pro­gram accom­pa­nied by an expo­si­tion of your solu­tion. The last day of class will be devoted to pre­sent­ing these pearls.

Over the course of the semes­ter we hope you will learn a lot and have fun too. See you soon!