Description
This lab assignment will require you to read, understand, evaluate and extend an advanced Haskell code base.
You will choose an existing Open Source library package (preferably from Hackage) and use it for a small project.
This lab assignment will require you to read, understand, evaluate and extend an advanced Haskell code base.
You will choose an existing Open Source library package (preferably from Hackage) and use it for a small project.
This part of the lab is just for you to choose a Haskell library and motivate your choice. You should start the next part before the deadline of this one.
First choose a package on Hackage which:
Note that for larger libraries, it may be intractable to consider the whole library. If so, you may select some well defined part of the library.
Troubles deciding on a package? Visit the package suggestion page.
You will now work with the library you have chosen.
Specification / QuickCheck testing: Write a test suite of QuickCheck properties and generators for the library (or a part of it). Your test suite must demonstrate that you have in-depth understanding of both QuickCheck and (part of) the library under test. Can you find any bugs? If so, report them to the maintainer of the package - or even better: fix them! If you would like to use another testing library than QuickCheck for property based testing or specification, please contact us.
Modification / extension: Show how the library could be changed to improve it in some aspect, or extend the library with some useful feature. Implementing the suggested feature is of course the best thing, but since this is a short project we understand if the result is limited to a partial solution or even a sketch of the implementation along with a description (in your report) of what difficulties you faced when trying to implement it.
Advanced usage / tutorial: Show some examples of what the library can be used for. The examples must demonstrate a deep understanding of the library (or part of it). Note: This task is potentially much simpler than the other two. Making a good tutorial is enough for a passing grade on this assignment, but is unlikely to yield a higher grade.
The expected work load for assignment 3 (all parts together) is around 40 hours. Try to demonstrate that you master (some of) the learning outcomes of the AFP course.
If you have questions, talk to the teaching assistants (Dan and Anton).
Write a report about you have been doing in the lab. The report should include:
Description of the library interface: If the library has poor documentation, this is typically done by updating it with proper (Haddock) comments for the functions and modules it exports. You can then send this to the package's maintainer. If the documentation is already in good shape, write a summary in your report.
Description of the library implementation: An explanation of some interesting techniques used in the implementation and perhaps other interesting things you have discovered about the library!
Analysis of your code: An overview of the code you have been writing and a few highlights, for example particular problems that you faced and how you solved them.
Before you submit, please read the note on cheating.
You are supposed to submit your solution using the Fire system.
Note: You do NOT have to use zip/gzip/tar/bzip on your files! Just upload and each file that is part of your solution. Don't forget to submit when you have uploaded all the files.
Good luck!