General information:
Name:
Functional programming
Code:
int.courses-267
Profile of education:
Academic (A)
Lecture language:
English
Semester:
Fall
Responsible teacher:
Dębski Roman (rdebski@agh.edu.pl)
Academic teachers:
Dębski Roman (rdebski@agh.edu.pl)
Module summary

Based on Haskell this course emphasizes general notions, techniques and patterns of functional programming that are universal and applicable in practically any language in contemporary use today.

Description of learning outcomes for module
MLO code Student after module completion has the knowledge/ knows how to/is able to Connections with FLO Method of learning outcomes verification (form of completion)
Social competence
M_K001 Can work as a part of a small team Execution of laboratory classes
Skills
M_U001 Can write short programs in Haskell Examination,
Execution of laboratory classes
M_U002 Can analyse and test short programs written in Haskell Execution of laboratory classes,
Examination
M_U003 Can effectively use basic functional design/computation patterns Execution of laboratory classes,
Examination
M_U004 Can effectively use tools to support software development Execution of laboratory classes
Knowledge
M_W001 Knows fundamental concepts of the functional paradigm Execution of laboratory classes,
Examination
M_W002 Knows basic functional design/computation patterns Execution of laboratory classes,
Examination
M_W003 Knows basic building blocks of the language Haskell Execution of laboratory classes,
Examination
FLO matrix in relation to forms of classes
MLO code Student after module completion has the knowledge/ knows how to/is able to Form of classes
Lecture
Audit. classes
Lab. classes
Project classes
Conv. seminar
Seminar classes
Pract. classes
Zaj. terenowe
Zaj. warsztatowe
Others
E-learning
Social competence
M_K001 Can work as a part of a small team - - + - - - - - - - -
Skills
M_U001 Can write short programs in Haskell - - + - - - - - - - -
M_U002 Can analyse and test short programs written in Haskell - - + - - - - - - - -
M_U003 Can effectively use basic functional design/computation patterns - - + - - - - - - - -
M_U004 Can effectively use tools to support software development - - + - - - - - - - -
Knowledge
M_W001 Knows fundamental concepts of the functional paradigm + - + - - - - - - - -
M_W002 Knows basic functional design/computation patterns + - + - - - - - - - -
M_W003 Knows basic building blocks of the language Haskell + - + - - - - - - - -
Module content
Lectures:

  1. The functional paradigm in the context of other paradigms; a brief introduction to Haskell; basic (data) types; defining a function; polymorphism; type inference (2 hours).
  2. Lazy evaluation; recursion; list processing; pattern matching (2 hours).
  3. Anonymous functions; higher-order functions; ‘’Collection Pipeline’’ pattern (2 hours).
  4. Data type declarations; algebraic data types; higher-kinded types; type classes and their instances; modules and imports; source code organisation (the stack tool) (2 hours).
  5. Input/Output; functors; applicative functors; monoids (2 hours).
  6. Monads (2 hours).
  7. Elements of category theory; trends in functional languages (2 hours).

Laboratory classes:

The topics of lab classes correspond to the material covered during their preceding lecture. Each lecture is, therefore, the introduction to the two lab classes that follow it. However, the last two lab classes do not follow any lecture. Instead, they are intended to consolidate what has been learned on the course, and to practice unit and property-based testing through a series of mini-projects.

Student workload (ECTS credits balance)
Student activity form Student workload
Summary student workload 125 h
Module ECTS credits 5 ECTS
Participation in lectures 15 h
Participation in laboratory classes 30 h
Preparation for classes 40 h
Realization of independently performed tasks 40 h
Additional information
Method of calculating the final grade:

The final course mark (FM) is calculated in the following way:
FM = 0.6 * L + 0.4 * E

where:
L – the average mark from all lab classes
E – the mark from the final exam

Prerequisites and additional requirements:

Students should have some programming experience (in any language), knowledge of simple data structures such as lists, sets, stacks, trees, and a small amount of mathematical maturity (basic notions of discrete mathematics, algebra and calculus).

Recommended literature and teaching resources:
  1. Miran Lipovaca, Learn You a Haskell for Great Good!, http://learnyouahaskell.com
  2. Bryan O’Sullivan, Don Stewart, and John Goerzen, Real World Haskell, http://book.realworldhaskell.org/read/
  3. Graham Hutton, Programming in Haskell, Cambridge University Press, 2007
  4. Simon Thompson, Haskell: the Craft of Functional Programming, Addison-Wesley, 2011
Scientific publications of module course instructors related to the topic of the module:

Additional scientific publications not specified

Additional information:

None