104 lines
5 KiB
Org Mode
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:
|
|
|