I. Introduction▲
L'objectif de ce tutoriel n'est pas d'apprendre à programmer, ni même d'apprendre la programmation fonctionnelle. Cela doit plutôt être un supplément au Haskell Report [4], qui fait, de toute manière, une présentation très complète et très technique. Notre objectif est de faire une légère introduction à Haskell pour quelqu'un qui a déjà une expérience avec au moins un autre langage, de préférence un langage fonctionnel (même si ce n'est qu'un langage « quasiment fonctionnel » comme ML ou Scheme). Si le lecteur souhaite en apprendre davantage au sujet de la programmation fonctionnelle, nous recommandons fortement l'ouvrage de Bird Introduction to Functional Programming [1] ou bien celui de Davie : An Introduction to Functional Programming Systems Using Haskell [2]. Pour une étude approfondie des langages de programmation fonctionnels et des techniques, incluant quelques-uns des principes de la théorie des langages, voir [3].
Le langage Haskell a beaucoup évolué depuis sa création en 1987. Ce tutoriel utilisera Haskell 98 [4]. Les anciennes versions de ce langage sont maintenant obsolètes ; les utilisateurs de Haskell sont encouragés à utiliser Haskell 98. Il y a aussi beaucoup d'extensions à Haskell 98 qui ont été implémentées. Elles ne font pas, à proprement parler, partie du langage Haskell et ne sont pas couvertes par ce tutoriel.
La méthode que nous utiliserons pour présenter les caractéristiques du langage est la suivante : intérêt de l'idée, quelques définitions, des exemples, et enfin les liens vers le Haskell Report pour les détails. Nous suggérons aussi au lecteur de ne pas tenir compte des détails avant d'avoir entièrement lu Gentle Introduction. D'un autre côté, la préface du Standard Haskell (en annexe A du Report) et les bibliothèques standard (dans le Library Report [5]) contiennent beaucoup d'exemples utiles de codes Haskell ; nous en recommandons la lecture attentive une fois ce tutoriel terminé. Cela ne va pas seulement donner au lecteur quelques idées sur ce qu'est un réel code Haskell, mais ça va aussi le familiariser avec une série de fonctions et de types prédéfinis qui font partie du standard Haskell.
Et pour finir, le site web Haskell, http://www.haskell.org contient beaucoup d'informations sur le langage Haskell et ses implémentations.
[Nous avons aussi fait le choix de ne pas présenter pléthore de règles de syntaxe lexicale dès le début. Nous préférons les présenter petit à petit, quand les exemples les demanderont. Elles seront présentées entre crochets, tout comme ce paragraphe. Cela tranche franchement avec l'organisation du Report, mais le Report reste la documentation faisant autorité (les références telles que « Report section 2.1 » correspondant aux sections du Report).]
Haskell est un langage de programmation fortement typé : (inventé par Luca Cardelli) les types sont « persistants » et un débutant doit être bien conscient dès le début de toute la puissance et de la complexité du système de typage de Haskell. Pour ceux qui ont principalement une expérience avec des langages « peu typés » tels que Perl, Tcl, ou Scheme, cela va nécessiter une adaptation relativement difficile ; pour ceux qui sont familiers de Java, C, Modula ou encore ML, l'adaptation devrait être facile, mais pas triviale, étant donné que le système de typage de Haskell est différent et plus évolué que beaucoup d'autres. Dans tous les cas, la programmation « typée » fait partie de l'expérience de la programmation Haskell et ne peut pas être évitée.