CMSC 388F will explore ele­gant exam­ples of func­tional pro­gram­ming. The first half will pro­vide an intro­duc­tion to Haskell and four impor­tant abstrac­tions: monoids, func­tors, applica­tive func­tors, and mon­ads. We will focus on sim­ple and plen­ti­ful exam­ples. The sec­ond half will cover a wide vari­ety of func­tional pro­gram­ming tech­niques and appli­ca­tions.



C- or bet­ter in CMSC 330




3120 CSI


Fri 10:00 AM–10:50 AM


Course staff will inter­act with stu­dents out­side of class via e-mail. Office hours may be avail­able, but are by appoint­ment only.




Cameron Moy

5108 IRB

Ben Mar­i­ano

5108 IRB


David Van Horn

5250 IRB



Grades will be main­tained on the the Depart­ment of Com­puter Sci­ence’s Grades Server. You can always see your cur­rent grade there. You are respon­si­ble for all mate­r­ial dis­cussed in lec­ture and posted on the class web page. Your final grade will be cal­cu­lated accord­ing to the fol­low­ing dis­tri­bu­tion.





Final Pro­ject



Here is the list of assign­ments, each due at 11:59PM.




Get­ting to Know Haskell



Work­ing with Abstrac­tions



Monad Enlight­en­ment



A Cou­ple Appli­ca­tions



Assign­ments will be released on the class web page and must be sub­mited through the Depart­ment of Com­puter Sci­ence’s Sub­mit Server. It is your respon­si­bil­ity to test your pro­gram and ver­ify that it works prop­erly before sub­mit­ting.

Pro­jects may be sub­mit­ted up to 48 hours late with no penalty.Think of this as an auto­matic exten­sion. Except for very rare cir­cum­stances, there will be no exten­sions beyond this. Your projects will be graded based on test cases not pro­vided in advance. Because grad­ing is done auto­mat­i­cally, you must fol­low the project spec­i­fi­ca­tion exactly. Any “hard cod­ing” in a project assign­ment may result in a score of zero for that project, and is con­sid­ered a bad-faith effort.Hard cod­ing refers to attempt­ing to make a pro­gram appear as if it works cor­rectly, when in fact it does not. One exam­ple of hard cod­ing would be print­ing the desired out­put instead of com­put­ing it. This is only one exam­ple, and if you have any ques­tions as to what con­sti­tutes hard cod­ing, be sure to ask ahead of time.


Stu­dents with dis­abil­i­ties who have been cer­ti­fied by the Acces­si­bil­ity and Dis­abil­ity Ser­vice as need­ing any type of spe­cial accom­mo­da­tions should see the instruc­tor as soon as pos­si­ble dur­ing the sched­ule adjust­ment period (the first two weeks of class). Please pro­vide ADS’s let­ter of accom­mo­da­tion to the instruc­tor at that time.

Academic Integrity

Pro­gram­ming projects are to be writ­ten indi­vid­u­ally. Coop­er­a­tion with oth­ers or use of unau­tho­rized mate­ri­als on prob­lem sets is a vio­la­tion of the Uni­ver­sity’s Code of Aca­d­e­mic Integrity. Both the per­son receiv­ing assis­tance and the per­son pro­vid­ing assis­tance are in vio­la­tion of the honor code. Any evi­dence of this, or of unac­cept­able use of com­puter accounts, use of unau­tho­rized mate­ri­als or coop­er­a­tion on exams or quizzes, or other pos­si­ble vio­la­tions of the Honor Code, will be sub­mit­ted to the Stu­dent Honor Coun­cil, which could result in an XF for the course, sus­pen­sion, or expul­sion.

For learn­ing the course con­cepts, stu­dents are wel­come to study together or to receive help from any­one else. You may dis­cuss with oth­ers assign­ment require­ments, the fea­tures of the pro­gram­ming lan­guages used, what was dis­cussed in class, and gen­eral syn­tax errors.Exam­ples of ques­tions you may ask are “Does a Java class def­i­n­i­tion end in a semi­colon?” or “What does a ‘class not found’ error indi­cate?” because they con­vey no infor­ma­tion about the con­tents of a project.

Other than help from the instruc­tional staff a project must solely and entirely be your own work. Work­ing with another stu­dent or indi­vid­ual, or using any­one else’s work in any way except as noted in this para­graph, is a vio­la­tion of the code of aca­d­e­mic integrity and will be reported to the Honor Coun­cil. You may not dis­cuss design of any part of a project with any­one except the instruc­tor or teach­ing assis­tants.Exam­ples of ques­tions you may not ask are “How did you imple­ment this part of the project?” or “Please look at my code and help me find my stu­pid syn­tax error!” You may not use any dis­al­lowed source of infor­ma­tion in cre­at­ing either their project design or code. When writ­ing projects you are free to use ideas or short frag­ments of code from pub­lished text­books or pub­licly avail­able infor­ma­tion, but the spe­cific source must be cited in a com­ment in the rel­e­vant sec­tion of the pro­gram.

Vio­la­tions of the Code of Aca­d­e­mic Integrity may include, but are not lim­ited to:

If you have any ques­tion about a par­tic­u­lar sit­u­a­tion or source then con­sult with the instruc­tors in advance. Should you have dif­fi­culty with a pro­gram­ming assign­ment you should see the instruc­tional staff and not solicit help from any­one else in vio­la­tion of these rules.

It is your respon­si­bil­ity, under the honor pol­icy, to report any inci­dent of aca­d­e­mic dis­hon­esty to the instruc­tor, or directly to the Honor Coun­cil. Every semes­ter, the depart­ment has dis­cov­ered a num­ber of stu­dents attempt­ing to cheat on assign­ments, in vio­la­tion of aca­d­e­mic integrity require­ments. Stu­dents’ aca­d­e­mic careers have been sig­nif­i­cantly affected by a deci­sion to cheat. Think about whether you want to join them before con­tem­plat­ing cheat­ing, or before help­ing a friend to cheat.

You are wel­come and encour­aged to study, com­pare, and dis­cuss imple­men­ta­tions of assign­ments with oth­ers after they are graded, pro­vided that all of the stu­dents in ques­tion have received non-zero scores for that assign­ment, and if that assign­ment will not be extended upon in a later assign­ment.