Les matériaux de ce cours sont distribués sous la [[https://fr.wikipedia.org/wiki/Licence_Creative_Commons][licence Creative
Commons Paternité]].
* Introduction
Cette partie introduit les idées fondamentales derrière la
programmation fonctionnelle ; il s'agit des fonctions de première
classe et des fonctions d'ordre supérieur. Le typage strict et
statique en Haskell est présenté et comparé aux autres stratégies de
typage que l'on retrouve dans d'autres langages de
programmation. Quelques éléments essentiels de la syntaxe sont
expliqués, y compris la syntaxe pour la définition de types de
données simples.
Les diapositives de cette partie se trouvent [[file:../content/courses/h4life/h4life-01.pdf][ici]]. Les exemples
présentés sont [[file:../content/courses/h4life/h4life-funcs.hs][ici]].
* Classes de types
Cette partie définit les classes de types en Haskell et les compare
aux classes et aux types dans d'autres langages de
programmation. Quelques différences subtiles sont mises en avant
pour éviter toute confusion.
Les diapositives de cette partie se trouvent [[file:../content/courses/h4life/h4life-02.pdf][ici]]. Les exemples
présentés se trouvent [[file:../content/courses/h4life/h4life-types.hs][ici]] et encore [[file:../content/courses/h4life/h4life-typeclasses.hs][ici]]. Le premier de ces fichiers
contient des caractères Unicode ; il faut donc bien choisir
l'encodage de l'affichage (Unicode ou UTF-8).
* Monades
Dans cette partie les monades sont présentées comme des outils pour
l'élimination des aspects répétitifs d'un calcul. Dans un premier
temps, les monades =Maybe= et =List= sont décrites. Ensuite, un
aperçu des monades =Reader=, =Writer=, et =State= est proposé.
Les diapositives de cette partie se trouvent [[file:../content/courses/h4life/h4life-03.pdf][ici]]. Les exemples
présentés se trouvent [[file:../content/courses/h4life/h4life-monads.hs][ici]].
* Parallel and Concurrent Programming
Cette partie décrit quelques techniques de base pour la
programmation parallèle et concurrente en Haskell. Dans un premier
temps, les annotations pour la programmation parallèle sont
présentées. Ensuite, une façon de lancer des fils d'exécution
parallèle est décrite, ainsi que les stratégies de synchronisation
par des variables partagées en exclusion mutuelle. Un scanner de
ports rudimentaire est développé pour une démonstration pratique de
ces techniques.
Les diapositives de cette partie se trouvent [[file:../content/courses/h4life/h4life-04.pdf][ici]]. L'implémentation
du tri rapide présentée dans le cours est [[file:../content/courses/h4life/h4life-sorting.hs][ici]]. Le code du scanner de
ports se trouve [[file:../content/courses/h4life/h4life-scanner.hs][ici]].
[[file:../content/courses/h4life/marlow-tutorial.pdf][Ce tutoriel]] (en anglais) sur la programmation parallèle et
concurrente en Haskell par Simon Marlow donne (beaucoup) plus de
détails.
* Sites d'enseignements
J'ai enseigné ce cours à [[http://www.tucs.fi/][Turku Center for Computer Science]] (janvier
2016), à [[https://www.pentalog.com/locations/chisinau-nearshore-delivery-center/][Pentalog Chișinău]] (décembre 2016), ainsi qu'à la [[http://fcim.utm.md/][faculté
d'informatique de l'Université technique de Moldavie]] (décembre
2016).
La consigne de l'examen pour la version du cours que j'ai enseignée
à Turku Center for Computer Science se trouve [[file:../content/courses/h4life/h4life-exam.pdf][ici]].