~~TRANS~~ ===== Haskell for Life ===== The goal of this **short course** is to familiarise the students with the computational model behind a mainstream high-abstraction functional programming language, with focus on developing practical skills. After having taken this course, the students will be able to solve practical programming problems of medium complexity by writing idiomatic Haskell code and making use of the rich library ecosystem. The course is intended for a wide audience and only requires basic programming skills in one of the other mainstream languages (C/C++, Java, C#/.NET, Python, etc.). The course relies heavily on showing actual interactive Haskell sessions and should be directly driven by feedback from the students. The course consists of 4 parts, the first 3 of which introduce some essential concepts, and the last one focuses on practical examples of parallel and concurrent programming. The parts of the course may be taught over multiple sessions (of about 2 hours); in particular, the first part should most probably be spread over two sessions to help students digest the basic concepts. At the end of the course the students may be required to submit a course project. The students who submit a working course project may be awarded 2 ECTS. The course is (somewhat loosely) based on the awesome book [[http://book.realworldhaskell.org/|Real World Haskell]]. The materials of this course are distributed under the [[https://en.wikipedia.org/wiki/Creative_Commons_license|Creative Commons Attribution Alone licence]] {{:ccby.png?60}} ==== 1. Introduction ==== The fundamental ideas behind functional programming are introduced, with particular focus on handling functions as first-class values and on higher order functions. Strict and static typing discipline in Haskell is discussed and compared to typing disciplines in other mainstream programming languages. Basic syntax is described along with the explanations, including the syntax for definitions of simple data types. The slides of this part are available {{:h4life-01.pdf|here}}. {{:h4life-funcs.hs|This file}} contains the examples. ==== 2. Typeclasses ==== Typeclasses in Haskell are introduced and compared to classes and types in other mainstream programming languages. Subtle differences are pointed out and discussed at length to avoid confusion. The slides of this part are available {{:h4life-02.pdf|here}}. {{:h4life-types.hs|This}} and {{:h4life-typeclasses.hs|this file}} contain the examples. The former file contains Unicode characters, so be sure to choose the correct Unicode encoding (UTF-8) to view it properly. ==== 3. Monads ==== Monads as a way to encapsulate repetitive details of the computation are introduced. The ''Maybe'' and ''List'' monads are described. An overview of the monads ''Reader'', ''Writer'', and ''State'' is provided. The slides of this part are available {{:h4life-03.pdf|here}}. {{:h4life-monads.hs|This file}} contains the examples. ==== 4. Parallel and Concurrent Programming ==== Techniques of parallel and concurrent programming in Haskell are described. Sparks as building blocks for a parallel program are discussed. Spawning threads and synchronising them via thread-safe shared storage is covered. A basic port scanner is presented as a practical example. The slides of this part are available {{:h4life-04.pdf|here}}. The sorting example can be found {{:h4life-sorting.hs|here}}. The source code of the port scanner is available {{:h4life-scanner.hs|here}}. For further details on parallel and concurrent programming in Haskell, check out [[http://community.haskell.org/~simonmar/par-tutorial.pdf|Simon Marlow's tutorial]]. ==== 5. Course Project/Final Exam ==== The subject for the exam in this course at the Technical University of Moldova can be found {{:h4life-utm-test.pdf|here}} (in Romanian). Please, send your solutions to the **E-mail address** indicated in the **PDF file**. The questions for the intermediate exam session can be downloaded {{:h4life-utm-pre-test.pdf|here}}. ---- I taught this course at the [[http://www.tucs.fi/|Turku Center for Computer Science]] (January 2016), at [[https://www.pentalog.com/locations/chisinau-nearshore-delivery-center/|Pentalog Chișinău]] (December 2016), and at the [[http://fcim.utm.md/|Faculty of Computer Science of the Technical University of Moldova]] (December 2016). The exam subject for the version of the course taught at the Turku Center of Computer Science can be found {{:h4life-exam.pdf|here}}.