Grading Assignmnent 1
One of the focuses for this lab is DSL design. This means that it is difficult to formulate
precise requirements for each grade without solving the problem for you (by telling you which
design to use).
This does not mean that we judge your submission arbitrarily. If you come and talk to us during office hours we can give you more precise descriptions of how you need to improve your submission for a higher grade.
Here are some qualities that count towards higher grades:
- The data types you use should not be needlessly complicated. The intended use of the data type should preferably be self-explanatory to someone who is familiar with the problem you are solving.
- Few primitive operations is usually good (although this can be taken to an extreme). If an operator can easily be defined using other primitive operators, it should be.
- Separation of concerns is good. For instance if you need to consider the existence of the lifespan operation when you code some other feature you may be doing something wrong.
- The examples should be interesting. Programs that use the advantages of EDSLs are encouraged, i.e. you should use your knowledge of Haskell to make more interesting programs using less code.
- The (optional) "additional operators" you define should demonstrate the flexibility of your language. Show for instance how a general operator can be defined and used to define different useful programs. Try to think of patterns that may recur in turtle programs and define operators to make them more concise. Think of useful higher order programs (programs that take programs as parameters).
- The parallel operator should fit well into your language. Its behaviour should be easy to describe without lots of special cases and arbitrary choices.
If you do not undestand what is meant by any of these we encourage you to ask us during office hours.
Specific requirements for Assignment 1
Necessary requirements for grade 4:
- You need to implement the TurtleExtras module.
- The graphical interface must handle infinite programs.
For grade 5:
- The relationships between your operators and some relevant algebraic laws must be defined
as a list of equations. You do not need to prove or test the equalities, but the
more obvious they are from your code the better.