Depuis toujours, en dé­ve­lop­pe­ment logiciel, il existe des angles d’approche très variés : les pa­ra­digmes de pro­gram­ma­tion dé­fi­nis­sent notamment la manière dont est rédigé un programme, et plus pré­ci­sé­ment dont est structuré son code. Une des approches les plus ap­pré­ciées reste la pro­gram­ma­tion fonc­tion­nelle, elle-même une sous-forme de l’approche dé­cla­ra­tive, qui se contente de rédiger uni­que­ment les résultats et non les étapes qui y amènent. Haskell est un re­pré­sen­tant in­con­testé de cette catégorie, un langage de pro­gram­ma­tion nommé d’après le ma­thé­ma­ti­cien américain Haskell Brooks Curry.

Dans cet article, vous dé­cou­vri­rez à quoi cor­res­pond Haskell, comment ce langage se distingue des autres langages de pro­gram­ma­tion et à quels projets il est destiné.

Haskell, c’est quoi ?

Haskell est un langage de pro­gram­ma­tion purement fonc­tion­nel dont la première version est sortie en 1990. Il a été baptisé en hommage au ma­thé­ma­ti­cien Haskell Brooks Curry, dont les travaux sur la logique com­bi­na­toire (entre 1920 et 1960) ont posé les bases des langages de pro­gram­ma­tion fonc­tion­nels. Haskell est basé sur le lambda-calcul (un langage formel pour calculer des fonctions), ce qui explique que son logo officiel ait adopté la lettre grecque lambda.

Les pro­grammes écrits en Haskell sont toujours re­pré­sen­tés par des fonctions ma­thé­ma­tiques, qui n’ont jamais d’effets de bord ni d’effets se­con­daires. Pour une même entrée, chaque fonction utilisée retourne toujours le même résultat et ne modifie jamais l’état d’un programme. La valeur de la sortie d’une fonction, et donc son résultat, dépendent ainsi ex­clu­si­ve­ment des derniers pa­ra­mètres d’entrée. Dans Haskell, il n’y a pas de cons­truc­tions im­pé­ra­tives pour pro­gram­mer le déroulé d’une commande.

À sa pu­bli­ca­tion, Haskell est devenu, d’une certaine manière, un langage de pro­gram­ma­tion fonc­tion­nelle standard. Par la suite, de très nombreux dérivés comme Parallel Haskell, Eager Haskell, Haskell++ ou Eden ont été dé­ve­lop­pés et restent très proches de Haskell. Quelques langages de pro­gram­ma­tion en­tiè­re­ment nouveaux se sont également orientés vers Haskell. Le langage universel Python, qui fait partie des langages de pro­gram­ma­tion Internet les plus im­por­tants, a par exemple repris la notation lambda et la syntaxe de trai­te­ment des listes de Haskell.

Que peut-on faire avec le langage de pro­gram­ma­tion Haskell ?

Le dé­ve­lop­pe­ment et la main­te­nance de grands projets de logiciels demandent du travail, du temps et de l’argent. Les langages de pro­gram­ma­tion fonc­tion­nels comme Haskell peuvent sim­pli­fier le processus. Haskell a notamment fait ses preuves grâce à ses avantages suivants :

  • il augmente sig­ni­fi­ca­ti­ve­ment la pro­duc­ti­vité des dé­ve­lop­peurs ;
  • le code des logiciels Haskell est court, clair et facile à en­tre­te­nir ;
  • les ap­pli­ca­tions Haskell sont moins sus­cep­tibles de ren­con­trer des erreurs et sont d’une grande fiabilité ;
  • la distance « sé­man­tique » entre les pro­gram­meurs et le langage est minime.

Le langage Haskell est donc idéal pour pro­gram­mer un vaste champ d’ap­pli­ca­tions. Il fait des mer­veilles pour les logiciels qui doivent accepter de nom­breuses mo­di­fi­ca­tions et permettre une main­te­nance facile. Les atouts de Haskell pèsent dans la balance pour l’éla­bo­ra­tion de spé­ci­fi­ca­tions, a fortiori de pro­to­types, qui peuvent être appliqués con­crè­te­ment, testés et débugués.

C’est surtout dans les branches exigeant l’ap­pli­ca­tion précise d’al­go­rithmes ma­thé­ma­tiques qu’on opte très souvent pour le langage de pro­gram­ma­tion Haskell. Exemples ca­rac­té­ris­tiques : sécurité réseau, fra­me­works de spé­ci­fi­ca­tion pour les systèmes embarqués, pro­grammes de mo­dé­li­sa­tion de calculs ma­thé­ma­tiques complexes.

Note

Haskell n’est pas un choix pertinent pour la pro­gram­ma­tion de logiciels simples.

Comment Haskell se démarque-t-il des autres langages de pro­gram­ma­tion ?

Haskell est un langage de pro­gram­ma­tion purement fonc­tion­nel. En cela, il diffère gran­de­ment de beaucoup d’autres langages. Les dif­fé­rences qui le dis­tin­guent des langages orientés vers le paradigme impératif sont fla­grantes : les pro­grammes rédigés en langages im­pé­ra­tifs exécutent le dé­rou­le­ment de commandes. Seulement, pendant l’exécution, le statut de ces commandes peut changer, par exemple en modifiant une variable. Les struc­tures de contrôle des flux veillent cependant à ce que les commandes puissent être exécutées plusieurs fois.

Avec l’approche fonc­tion­nelle, dont Haskell est la base, le logiciel ne donne aucun ordre direct à l’or­di­na­teur sur la manière dont celui-ci doit exécuter une action. À l’inverse, on décrit le problème et sa solution. Les variables sont statiques : avec Haskell et d’autres langages fonc­tion­nels, une variable ayant la valeur « 1 » a toujours la valeur « 1 » et il n’est pas possible de la modifier si fa­ci­le­ment. Les fonctions ont uni­que­ment pour but de calculer quelque chose et de retourner le résultat cor­res­pon­dant.

Apprendre le langage Haskell : prérequis, conseils et premier exemple

Apprendre le langage Haskell a des avantages pour plusieurs raisons. D’une part, vous serez en mesure de pro­gram­mer vos propres solutions lo­gi­cielles en Haskell, lorsque ce langage est indiqué. D’autre part, vous aurez les com­pé­tences né­ces­saires pour tra­vail­ler sur une ap­pli­ca­tion tierce rédigée en Haskell. Comme ce langage fait figure de standard en matière de pro­gram­ma­tion fonc­tion­nelle, son ap­pren­tis­sage s’avère utile si vous souhaitez acquérir des con­nais­sances générales sur la pro­gram­ma­tion fonc­tion­nelle.

Comme c’est souvent le cas avec d’autres langages, vous avez deux options pour rédiger un code en Haskell : option par piles avec un com­pi­la­teur ou option in­te­rac­tive avec un in­ter­pré­teur. Un système in­te­rac­tif offre l’avantage d’inclure une interface en ligne de commande adaptée dans laquelle vous pouvez tester di­rec­te­ment le code pour en évaluer les résultats. Cette option est à pri­vi­lé­gier pour un premier contact simple avec le langage Haskell. Un des in­ter­pré­teurs les plus connus, qui n’est plus en dé­ve­lop­pe­ment actif, est Hugs. Un autre système, GHC (Glasgow Haskell Compiler), propose un pack complet et pratique avec un in­ter­pré­teur et un com­pi­la­teur pour Haskell.

Conseil

Notre article « Com­pi­la­teur et in­ter­pré­teur : ex­pli­ca­tions et dif­fé­rence » vous présente en détail les dif­fé­rences entre les méthodes de travail et de fonc­tion­ne­ment des in­ter­pré­teurs et des com­pi­la­teurs.

Le bout de code suivant offre un exemple simple de la façon dont fonc­tionne Haskell :

add :: Integer -> Integer -> Integer    --function declaration
add x y =  x + y                              --function definition
main = do
    putStrLn "La somme des deux nombres est :"
    print(add 2 5)     --calling a function

Dans la ligne de code 1, on déclare la fonction Haskell, qui doit comporter un integer (nombre entier) en tant que valeur d’entrée et de sortie. Dans la ligne 2, la fonction est définie con­crè­te­ment : on ad­di­tionne deux arguments, puis le résultat de l’addition doit être retourné. On indique les valeurs « 2 » et « 5 » en entrées. L’exécution de ce bout de code retourne le résultat suivant :

La somme des deux nombres est : 7
Conseil

Retrouvez des conseils et astuces plus avancés pour découvrir la syntaxe et le fonc­tion­ne­ment de Haskell dans notre tutoriel Haskell complet.

Aller au menu principal