Advanced Functional Programming
Avancerad funktionell programmering
About the Syllabus
Grading scale
Course modules
Position
The course can be part of the following programmes:
- Computer Science, Bachelor´s Programme (N1COS)
- Computer Science, Master's Programme (N2COS)
- Applied Data Science Master's Programme (N2ADS)
The course is a also a single-subject course at Gothenburg University.
Main field of study with advanced study
Entry requirements
To be eligible to the course, the student should have successfully completed 120 credits of studies in computer science or equivalent. Specifically, the following courses are required, or equivalent:
- Functional Programming, 7.5 credits.
- Discrete Mathematics for Computer Scientists, 7.5 hec, or Logic in Computer Science, 7.5 hec, or Finite Automata Theory and Formal Language, 7.5 hec, or equivalent.
- Additionally, one of the following courses (or equivalent): Programming Language Technology, 7.5 hec, or Types for Programs and Proofs, 7.5 hec, or Functional programming: continuation course, 7.5 hec.
Applicants must prove knowledge of English: English 6/English level 2 or the equivalent level of an internationally recognized test, for example TOEFL, IELTS.
Content
Functional programming languages center around expressions rather than statements and thus are closer to mathematical language than programming languages from other paradigms. This proximity to mathematics has made functional languages into a fruitful basis for advanced type systems and reasoning about program correctness.
This course will explore how advanced type systems can be utilized to structure programs in a way that helps reasoning about their correctness. Along this way we will study how programs can be structured algebraically, meaning through types with associated operations that satisfy suitable laws. We will learn how to model and compose effects, for instance via monads and monad transformers. We will explore different techniques how to assert the correctness of programs, including systematic testing and formal proof.
Finally, we investigate how to write functional programs at a professional level, touching on topics such as automated test suites, continuous integration, packaging, and interacting with software ecosystems.
Languages used in the course are Haskell and Agda, or other suitable advanced functional programming languages.
Objectives
After completion of the course the student should be able to:
Knowledge and Understanding
- Explain advanced type system features, such as type classes, indexed datatypes and dependent types, functors, monads and monad transformers, and relate them to each other.
Skills and Abilities
- Structure functional programs through the use of type classes, monads and monad transformers, and embedded domain specific languages (EDSLs) or application programming interfaces (APIs).
- Use specification-based development techniques to formulate and test properties about programs.
- Reason about the correctness of functional programs, and transform them on the basis of such reasoning.
- Analyse and extend functional programs which use advanced type system features.
Judgement Ability and Approach
- Discuss the above topics (i.e., type system features, structuring techniques, specification-based techniques and correctness), and how they relate to each other.
Sustainability labelling
Form of teaching
Lectures, laborations, supervision and self-studies. The students are expected to do a lot of independent programming and self-study.
Language of instruction: English
Examination formats
The course is examined by 2-3 programming laborations, normally done in pairs during the course, and an individual exam given in an examination hall at the end.
If a student who has been failed twice for the same examination element wishes to change examiner before the next examination session, such a request is to be granted unless there are specific reasons to the contrary (Chapter 6 Section 22 HF).
If a student has received a certificate of disability study support from the University of Gothenburg with a recommendation of adapted examination and/or adapted forms of assessment, an examiner may decide, if this is consistent with the course’s intended learning outcomes and provided that no unreasonable resources would be needed, to grant the student adapted examination and/or adapted forms of assessment.
If a course has been discontinued or undergone major changes, the student must be offered at least two examination sessions in addition to ordinary examination sessions. These sessions are to be spread over a period of at least one year but no more than two years after the course has been discontinued/changed. The same applies to placement and internship (VFU) except that this is restricted to only one further examination session.
If a student has been notified that they fulfil the requirements for being a student at Riksidrottsuniversitetet (RIU student), to combine elite sports activities with studies, the examiner is entitled to decide on adaptation of examinations if this is done in accordance with the Local rules regarding RIU students at the University of Gothenburg.
Grades
Sub-courses
- Written hall examination, 3 higher education credits
Grading scale: Pass with distinction (5), Pass with credit (4), Pass (3) and Fail (U). - Laboratory work, 4.5 higher education credits
Grading scale: Pass with distinction (5), Pass with credit (4), Pass (3) and Fail (U).
The grading scale comprises: Pass with distinction (5), Pass with credit (4), Pass (3) and Fail (U).
To pass the course, students must receive a passing grade in both modules.
The final grade of the full course is based 60% on the result of the laborations and 40% on the result of the written examination.
Course evaluation
The course is evaluated through meetings both during and after the course between teachers and student representatives. Further, an anonymous questionnaire is used to ensure written information. The outcome of the evaluations serves to improve the course by indication which parts could be added, improved, changed or removed.
Other regulations
The course is a joint course together with Chalmers.
It is recommended, but not required, to read the following courses beforehand: DIT602 Algorithms, and one of DIT201 Logic in Computer Science or DIT321 Finite Automata Theory and Formal Languages.
The course replaces the course DIT260, 7.5 credits. The course cannot be included in a degree which contains DIT260. Neither can the course be included in a degree which is based on another degree in which the course DIT260 is included.