Quelques ressources pour apprendre/utiliser Haskell

Voir aussi : video youtube - code source

Haskell n’est pas particulièrement réputé pour sa facilité d’apprentissage ni pour la qualité de ses documentations. Cependant, il existe tout de même des ressources très intéressantes pour apprendre Haskell et c’est l’objet de cet article. Bien entendu, cet article est forcément très incomplet et très subjectif.

Learning Curves (for different programming languages)

Quelques ressources

Site principaux

Le site officiel haskell.org est certainement le premier à regarder. Il contient notamment de nombreux liens vers d’autres ressources/documentations.

Le wiki contient également des liens intéressants ainsi que des pages d’explications, même si certaines sont un peu anciennes.

Enfin le GHC User’s Guide est également intéressant pour certains aspects techniques comme le profilage, l’optimisation, les extensions de langage, etc.

Livres

Le wikibook sur Haskell est étonnament assez peu cité sur les réseaux, mais c’est une ressource très intéressante pour apprendre le langage.

Parmi les livres disponibles gratuitement, on trouve Apprendre Haskell vous fera le plus grand bien ! et Real World Haskell. Le premier est assez réputé comme livre d’introduction (et pour ses illustrations) mais il est assez verbeux et peu orienté sur l’utilisation pratique de Haskell. Le second livre est, au contraire, orienté sur l’aspect pratique mais commence à dater un peu (2008).

Parmi les livres payants, le récent Haskell Programming from first principles a bonne réputation. C’est un livre assez volumineux, qui part vraiment des principes fondammentaux. Au contraire, le Programming in Haskell est assez court et se lit très facilement.

Résumés et tutoriaux

Haskell permet d’apprendre de nombreux concepts. Certaines pages proposent des programmes pédagogiques pour s’y retrouver, par exemple le Haskell Study Plan.

Quand on connait les bases de Haskell et qu’on veut commencer des “vrais” codes, le What I Wish I Knew When Learning Haskell contient de nombreux conseils intéressants.

Également le Write Yourself a Scheme in 48 Hours est un exemple classique qui illustre l’utilisation de Haskell sur un projet concret.

Enfin, le State of the Haskell ecosystem recence les domaines où Haskell est judicieux (ou pas) à utiliser.

Blogs

Il y a de nombreux blogs qui parlent de Haskell, souvent intéressants mais souvent sur des sujets assez évolués.

The Haskell Pyramid

On peut citer, parmi de nombreux autres, les blogs de Overcoming Software, FPComplete, Serokell, Alexis King

Videos

De même, on trouve des vidéos intéressantes à propos de Haskell, notamment sur Youtube.

Par exemple, les vidéos de Philipp Hagenlocher sont particulièrement bien faites et abordent un large panel de notions. Les vidéos de Tweag abordent des sujets plus spécifiques mais sont également très intéressantes.

Autres

Certains cours d’universités sont disponibles en ligne et peuvent constituer une bonne façon d’apprendre Haskell, et il existe également des communautés sur Slack/Discord/IRC… (voir le site officiel et le wiki pour les liens). À noter également l’agégateur de liens Haskell Planetarium.

Enfin, Haskell est utilisé dans la recherche sur les langages de programmation (ICFP, POPL, JFP…). Les papiers de recherche sont généralement difficilement abordables mais peuvent tout de même être assez accessibles, au moins en partie. Certaines fonctionnalités de Haskell viennent directement du monde de la recherche, si bien qu’il peut parfois être intéressant de lire les papiers originaux (par exemple, Monadic parser combinators, Data types à la carte, Lazy Functional State Threads, Composable memory transactions…)

Autres ressources

GHCi

GHCi est l’interpréteur interactif fourni de base avec GHC (disponible en ligne également, par exemple sur replit). Il fonctionne de la même façon que les REPL du monde LISP (Read-Eval-Print-Loop) : à chaque fois qu’on saisit du code, l’interpréteur le lit, l’évalue, affiche le résultat puis boucle pour la saisie suivante.

$ ghci
GHCi, version 8.6.5: http://www.haskell.org/ghc/  :? for help

Prelude> 21*2
42

L’invite de commande est assez évoluée : historique, complétion, raccourcis “à la emacs”… On peut également écrire du code multi-ligne :

*Math> :{
*Math| x = do
*Math|   y <- (*2) <$> Just 20
*Math|   return $ y+2
*Math| :}

*Math> x
Just 42

On peut également charger un fichier source, et le recharger si on le modifie en parallèle :

Prelude> :load Math.hs 
[1 of 1] Compiling Math             ( Math.hs, interpreted )
Ok, one module loaded.

*Math> :r
Ok, one module loaded.

*Math> mul2Num 21
42

On peut également interroger l’interpréteur pour demander des types, kinds, info :

*Math> :type mul2Num 
mul2Num :: Num a => a -> a

*Math> :kind Expr
Expr :: (* -> *) -> Constraint

*Math> :info Expr
class Expr (repr :: * -> *) where
  val :: (Num a, Show a) => a -> repr a
  add :: Num a => repr a -> repr a -> repr a
  mul :: Num a => repr a -> repr a -> repr a
  {-# MINIMAL val, add, mul #-}
  	-- Defined at Math.hs:10:1
instance [safe] Expr Eval -- Defined at Math.hs:17:10

Voire même afficher le contenu complet d’un module :

*Math> :browse! Data.Maybe
-- not currently imported
Data.Maybe.catMaybes :: [Maybe a] -> [a]
Data.Maybe.fromJust :: Maybe a -> a
Data.Maybe.fromMaybe :: a -> Maybe a -> a
Data.Maybe.isJust :: Maybe a -> Bool
Data.Maybe.isNothing :: Maybe a -> Bool
Data.Maybe.listToMaybe :: [a] -> Maybe a
Data.Maybe.mapMaybe :: (a -> Maybe b) -> [a] -> [b]
Data.Maybe.maybeToList :: Maybe a -> [a]
-- imported via Prelude
maybe :: b -> (a -> b) -> Maybe a -> b
Just :: a -> Maybe a
data Maybe a = ...
Nothing :: Maybe a

Et enfin, d’importer des module, activer des extensions de langage, observer l’évaluation (paresseuse), débugger, etc.

Hoogle

Hoogle est un outil en ligne qui permet de trouver des fonctions, types ou classes et d’accéder à leur documentation. Une particularité intéressante est qu’il permet également d’entrer des signatures afin de chercher les fonctions correspondantes :

Hoogle est également utilisable en ligne de commande, à l’intérieur d’un projet.

Hackage

Enfin, Hackage regroupe la documentation des bibliothèques communautaires Haskell. Il permet notamment de trouver des bibliothèques et d’afficher leurs informations principales :

ainsi que la documentation de leurs différents modules :

et leur code source (avec navigation hypertexte) :

Conclusion

Même si cela peut certainement être amélioré, il y a pas mal de ressources intéressantes à propos de Haskell : site officiel, livres, cours, vidéos, blogs, forums, messageries, etc.

De plus, Haskell propose des outils plus spécifiques mais néanmoins très pratiques, comme l’interpréteur interactif, le moteur de recherche Hoogle et la documentation des bibliothèques communautaires sur Hackage.