CMSC 388F will explore elegant examples of functional programming. The first half will provide an introduction to Haskell and four important abstractions: monoids, functors, applicative functors, and monads. We will focus on simple and plentiful examples. The second half will cover a wide variety of functional programming techniques and applications.
C- or better in CMSC 330
Fri 10:00 AM–10:50 AM
Course staff will interact with students outside of class via e-mail. Office hours may be available, but are by appointment only.
David Van Horn
Grades will be maintained on the the Department of Computer Science’s Grades Server. You can always see your current grade there. You are responsible for all material discussed in lecture and posted on the class web page. Your final grade will be calculated according to the following distribution.
Here is the list of assignments, each due at 11:59PM.
Getting to Know Haskell
Working with Abstractions
A Couple Applications
Assignments will be released on the class web page and must be submited through the Department of Computer Science’s Submit Server. It is your responsibility to test your program and verify that it works properly before submitting.
Projects may be submitted up to 48 hours late with no penalty.Think of this as an automatic extension. Except for very rare circumstances, there will be no extensions beyond this. Your projects will be graded based on test cases not provided in advance. Because grading is done automatically, you must follow the project specification exactly. Any “hard coding” in a project assignment may result in a score of zero for that project, and is considered a bad-faith effort.Hard coding refers to attempting to make a program appear as if it works correctly, when in fact it does not. One example of hard coding would be printing the desired output instead of computing it. This is only one example, and if you have any questions as to what constitutes hard coding, be sure to ask ahead of time.
Students with disabilities who have been certified by the Accessibility and Disability Service as needing any type of special accommodations should see the instructor as soon as possible during the schedule adjustment period (the first two weeks of class). Please provide ADS’s letter of accommodation to the instructor at that time.
Programming projects are to be written individually. Cooperation with others or use of unauthorized materials on problem sets is a violation of the University’s Code of Academic Integrity. Both the person receiving assistance and the person providing assistance are in violation of the honor code. Any evidence of this, or of unacceptable use of computer accounts, use of unauthorized materials or cooperation on exams or quizzes, or other possible violations of the Honor Code, will be submitted to the Student Honor Council, which could result in an XF for the course, suspension, or expulsion.
For learning the course concepts, students are welcome to study together or to receive help from anyone else. You may discuss with others assignment requirements, the features of the programming languages used, what was discussed in class, and general syntax errors.Examples of questions you may ask are “Does a Java class definition end in a semicolon?” or “What does a ‘class not found’ error indicate?” because they convey no information about the contents of a project.
Other than help from the instructional staff a project must solely and entirely be your own work. Working with another student or individual, or using anyone else’s work in any way except as noted in this paragraph, is a violation of the code of academic integrity and will be reported to the Honor Council. You may not discuss design of any part of a project with anyone except the instructor or teaching assistants.Examples of questions you may not ask are “How did you implement this part of the project?” or “Please look at my code and help me find my stupid syntax error!” You may not use any disallowed source of information in creating either their project design or code. When writing projects you are free to use ideas or short fragments of code from published textbooks or publicly available information, but the specific source must be cited in a comment in the relevant section of the program.
Violations of the Code of Academic Integrity may include, but are not limited to:
Failing to do all or any of the work on a project by yourself, other than assistance from the instructional staff.
Using any ideas or any part of another person’s project, or copying any other individual’s work in any way.
Giving any parts or ideas from your project, including test data, to another student.
Allowing any other students access to your program on any computer system.
Posting solutions to your projects to publicly-accessible sites, for example, on Github.
Transferring any part of a problem set to or from another student or individual by any means, electronic or otherwise.
If you have any question about a particular situation or source then consult with the instructors in advance. Should you have difficulty with a programming assignment you should see the instructional staff and not solicit help from anyone else in violation of these rules.
It is your responsibility, under the honor policy, to report any incident of academic dishonesty to the instructor, or directly to the Honor Council. Every semester, the department has discovered a number of students attempting to cheat on assignments, in violation of academic integrity requirements. Students’ academic careers have been significantly affected by a decision to cheat. Think about whether you want to join them before contemplating cheating, or before helping a friend to cheat.
You are welcome and encouraged to study, compare, and discuss implementations of assignments with others after they are graded, provided that all of the students in question have received non-zero scores for that assignment, and if that assignment will not be extended upon in a later assignment.