6 ECTS credits
150 h study time

Offer 2 with catalog number 4013056FNR for all students in the 2nd semester at a (F) Master - specialised level.

Semester
2nd semester
Enrollment based on exam contract
Impossible
Grading method
Grading (scale from 0 to 20)
Can retake in second session
Yes
Taught in
English
Faculty
Faculty of Sciences and Bioengineering Sciences
Department
Computer Science
Educational team
Wolfgang De Meuter (course titular)
Activities and contact hours
26 contact hours Lecture
26 contact hours Seminar, Exercises or Practicals
150 contact hours Independent or External Form of Study
Course Content
PREREQUISITES
This course starts from scratch and merely requires that students are already able to program. However, basic knowledge about higher order languages and first-class functions (such as Scheme, Lisp, Python, Ruby, Scala, Clojure, Erlang or Prolog) will be a big plus. On top of this, a basic knowledge of programming language theory (grammars, regular expressions, automata and lambda calculus) is assumed.
 
CONTENTS
Introduction to Haskell and Functional Programming, Higher-order Functions
Algebraic Data Types, Numbers, Strings, Tuples, Lists.
Type Classes: Definition and Instantiation.
Equational Reasoning and Structural Induction, Fusion Laws.
Type Classes: Implementation and Variations.
Input and Output using the IO-Monad, random numbers.
Functors and Applicative Functors, Monoids.
Monads and Monad Transformers: definition, monad laws, implementation, taxonomy of monads, the IO monad
Parsers and Parser combinators: definition and usage
Concurrent Programming: the par-function, threads in the IO monad, STM
Hindley-Milner Typing: definition and inference.
Course material
Digital course material (Required) : All transparencies and all the code will be provided to the students, Canvas
Practical course material (Recommended) : Functional Programming, Many standard textbooks on functional programming are available. They will be referred to during the lectures.
Additional info
All transparencies and all the code will be provided to the students through the learning platform. Many standard textbooks on functional programming are available. Large parts of the course have been built based on "Learn You a Haskell for Great Good" by Miran Lipovaca.
 
Learning Outcomes

Algemene competenties

Knowledge and Understanding: This course is an advanced study of functional programming. Functional programming languages are programming languages that don't feature assignment statements (i.e. = or set!), nor sequencing (i.e. begin or {}) and standard I/O facilities since the latter are but assignments on global input and output state variables. Because of these constraints, functional programming languages have a number of scientific advantages w.r.t. imperative languages. On the one hand, these constraints engender a radically different way of programming. The goal of the course is to introduce students to programming techniques that are used by such pure languages in order to construct realistic software. On the other hand, it is our purpose to introduce students to the scientific advantages that are a consequence of the restrictions of such languages.
 
Application of Knowledge and Understanding: Students have to be able to apply the contents of the course in the conception of a software project in a functional programming language. This skill is tested by the fact that students have to implement a concrete project.
 
Making Judgements: Students have to be able to make a concrete judgement about the applicability of functional programming in a given situation. Once applicable, the role of (or the absence of) static typing in their choice of programming language has to be justified.
 
Learning Skills: We will acquaint the student with two functional programming languages that are sufficiently representative to provide the student with the necessary skills to classify other languages. This will also provide the student with enough programming experience in order to understand more advanced FP topics.

Grading

The final grade is composed based on the following categories:
Oral Exam determines 50% of the final mark.
Written Exam determines 50% of the final mark.

Within the Oral Exam category, the following assignments need to be completed:

  • Oral theorical examination with a relative weight of 1 which comprises 50% of the final mark.

    Note: The theoretical part consists of an oral exam about the topics discussed.

Within the Written Exam category, the following assignments need to be completed:

  • Written practical exam with a relative weight of 1 which comprises 50% of the final mark.

    Note: The practical part consists of a written exam in which the Haskell programming skills of the students are tested.

Additional info regarding evaluation
The exam consists of a theoretical and a practical part. The theoretical part consists of an oral exam about the topics discussed. The practical part consists of a programming project during which the Haskell programming skills of the students are tested. Both parts are equally important for the final mark. Absence for one of the constituents implies absence for the entire course.
 
Allowed unsatisfactory mark
The supplementary Teaching and Examination Regulations of your faculty stipulate whether an allowed unsatisfactory mark for this programme unit is permitted.

Academic context

This offer is part of the following study plans:
Master of Applied Sciences and Engineering: Computer Science: Artificial Intelligence
Master of Applied Sciences and Engineering: Computer Science: Multimedia
Master of Applied Sciences and Engineering: Computer Science: Software Languages and Software Engineering
Master of Applied Sciences and Engineering: Computer Science: Data Management and Analytics