Bachelor
Informatica
Informatiekunde
Kunstmatige intelligentie
Master
Computing Science
Game&Media Technology
Artifical Intelligence
Business Informatics

Website: | website containing additional information | |||||||||||||||||||||||

Course code: | INFOAFP | |||||||||||||||||||||||

Credits: | 7.5 ECTS | |||||||||||||||||||||||

Period: | period 3 (week 6 through 15, i.e., 6-2-2017 through 13-4-2017; retake week 27)
| |||||||||||||||||||||||

Timeslot: | C | |||||||||||||||||||||||

Participants: | up till now 16 subscriptions | |||||||||||||||||||||||

Schedule: | Official schedule representation can be found in Osiris | |||||||||||||||||||||||

Teachers: | Dit is een oud rooster!
| |||||||||||||||||||||||

Contents: | This course builds upon knowledge gained in the introductory courses on functional programming and languages and compilers. Using Haskell as our language of choice, we will look at several advanced functional programming techniques, patterns, libraries and tools. Many of the research projects inside the department make use of functional programming, and one goal of this course is to equip you with sufficient knowledge in order to participate in such projects. Here are a few topics that the course will most likely cover: - Development
- Tools
- Testing
- Debugging
- Profiling
- Libraries
- Data Structures
- Interfacing to other programming languages
- Monads, monad transformers, arrows and applicative functors
- Embedded domain-specific languages
- Language features and extensions
- Multi-parameter type classes and functional dependencies
- Type families
- Kinds
- Generalized Algebraic Data Types (GADTs)
- Existential types
- Higher-rank polymorphism
- to develop large Haskell programs, using a wide range of Haskell tools and libraries;
- to understand the theoretical underpinnings of FP, including topics such as lambda calculus, type systems, combinatory logic, Church encodings, etc.
- to design types carefully, guaranteeing certain invariants, and develop type-level programs to compute new types or derive new programs from type definitions
- to prove properties of programs using equational reasoning, and formalize these proofs in an interactive proof assistant such as Agda or Coq;
- to understand different evaluation strategies, and in particular, lazy evaluation and its impact on performance;
- to apply common design patterns and structures used in functional languages, such as monoids, functors, monads, applicative functors, etc.
| |||||||||||||||||||||||

Literature: | There are no required books for this course. The course will refer to research papers that are available through the internet and electronic libraries. The course web page will contain further details. | |||||||||||||||||||||||

Course form: | Lectures, assignments, joint discussion, programming exercise. The lectures cover the list of topics mentioned above and are often based on selected research papers. Participants are expected to read the material before the lectures. Assignments will consist of theoretical questions about the material covered in lecturers and of related programming assignments. All participants are expected to complete the assignments and hand in a solution to the practical assignment The participants have to perform a (larger) programming task in a team of 2-4 students. The programming assignment will be explained in the beginning of the course. At the end a presentation has to be given about the project, and a short paper has to be written about the project. The final exam is based on the topics of the lectures and assignments. | |||||||||||||||||||||||

Exam form: | Your final mark for this course will consist of:
- marks for the assignments (20%)
- overall score for the large programming task (20%)
- written examination (50%)
- participation in discussion/joint reading (10%)
| |||||||||||||||||||||||

Minimum effort to qualify for 2nd chance exam: | Om aan de aanvullende toets te mogen meedoen moet de oorspronkelijke uitslag minstens 4 zijn. |