Elective:ProgrammingInHaskell.tex

From IU
Jump to navigation Jump to search

Programming in Haskell

  • Course name: Programming in Haskell
  • Course number: XYZ
  • Knowledge area: Software Engineering, Software design patterns

Administrative details

  • Faculty: Computer Science and Engineering
  • Year of instruction: 3rd and 4th years of BS
  • Semester of instruction: Any
  • No. of Credits: 5 ECTS
  • Total workload on average: 12 hours per week including 8 hours of self-study
  • Frontal lecture hours: 2 per week.
  • Frontal tutorial hours: 0.
  • Lab hours: 2 per week.
  • Individual lab hours: 0.
  • Frequency: weekly throughout the semester.
  • Grading mode: letters: A, B, C, D.

Course outline

Haskell is an advanced purely functional programming language with strong static type system and elegant mathematical background. It is being increasingly used by organizations like Facebook and Kaspersky Lab along with various companies in finance, blockchain, advertising, data science, scientific computing and more. In this course we will explore practical functional programming in Haskell. In the first part of this course students will learn the necessary Haskell basics to easily write practical programs, covering higher-order functions, parametric polymorphism, lazy evaluation, algebraic data types and type classes. The second part of the course will introduce some of the abstractions commonly used in functional software design, such as monoids, functors and monads. The last few weeks will introduce students to several more advanced topics. Evaluation will be based on class participation, programming assignments, and an open-ended final project completed individually or in small teams.

Expected learning outcomes

  • understand benefits and tradeoffs of purely functional programming,
  • understand, verify and test properties of functional programs,
  • reason about programs using equational reasoning,
  • closely model various domains with algebraic data types,
  • become familiar with abstractions representing some common software design patterns,
  • create practical projects in Haskell.

Expected acquired core competences

  • programming in purely functional style,
  • modelling domains using algebraic data types,
  • using and applying higher-order functions, parametric polymorphism, lazy evaluation and type classes for program structure;
  • recognising and using Semigroup and Monoid abstration in some domains;
  • using Functor, Applicative and Monad type classes for handling effects in purely functional code;

Prerequisites

It is recommended to pass Data Structures and Algorithms as well as Discrete math / Logic courses before Programming in Haskell to better understand some of the examples and design decisions. Experience from Software Project course will be helpful to draw analogies and analyze differences in OO and FP software design. Some students might benefit from Introduction to Artificial Intelligence and Data Modeling and Databases courses for stage II of their final projects.

Textbook

  • Hutton, G. (2016). Programming in Haskell. Cambridge: Cambridge University Press.

Reference material

Required computer resources

Students should have laptops with the latest version of Haskell Platform installed.

Evaluation

  • Weekly homework assignments (30%)
  • Final Project Stage I (20%)
  • Final Project Stage II (40%)
  • Class and lab participation (10%)