work-site/en/h4life.org
2018-09-22 23:40:20 +02:00

104 lines
5 KiB
Org Mode

#+TITLE: Haskell for Life
#+LANGUAGE: en
#+ATTR_HTML: :alt in French :class lang-lifted
[[file:../fr/h4life.org][file:../content/imgs/fr.png]]
#+ATTR_HTML: :alt return home :class home
[[file:home.org][file:../content/imgs/home.png]]
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]].
#+ATTR_HTML: :alt image of Creative Commons Attribution Alone licence :class ccby
[[https://en.wikipedia.org/wiki/Creative_Commons_license][file:../content/imgs/ccby.png]]
The materials of this course are distributed under the [[https://en.wikipedia.org/wiki/Creative_Commons_license][Creative
Commons Attribution Alone licence]].
* 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 [[file:../content/courses/h4life/h4life-01.pdf][here]]. [[file:../content/courses/h4life/h4life-funcs.hs][This file]] contains the
examples.
* 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 [[file:../content/courses/h4life/h4life-02.pdf][here]]. [[file:../content/courses/h4life/h4life-types.hs][This]] and [[file:../content/courses/h4life/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.
* 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 [[file:../content/courses/h4life/h4life-03.pdf][here]]. [[file:../content/courses/h4life/h4life-monads.hs][This file]] contains the
examples.
* 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 [[file:../content/courses/h4life/h4life-04.pdf][here]]. The sorting example can
be found [[file:../content/courses/h4life/h4life-sorting.hs][here]]. The source code of the port scanner is available
[[file:../content/courses/h4life/h4life-scanner.hs][here]].
For further details on parallel and concurrent programming in
Haskell, check out [[file:../content/courses/h4life/marlow-tutorial.pdf][Simon Marlow's tutorial]].
* Teaching Sites
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 I taught at the Turku
Center of Computer Science can be found [[file:../content/courses/h4life/h4life-exam.pdf][here]].
* Local Variables :noexport:
# Local Variables:
# org-link-file-path-type: relative
# eval: (auto-fill-mode)
# ispell-local-dictionary: "en"
# End: