OCaml ★ Série complète

Du λ-calcul à OCaml

ou comment tout construire à partir de rien (ou presque)

λ

« Un langage fonctionnel, c'est comme un mouton qui se prend pour une fonction. Et réciproquement. »
Anonyme (qui préfère rester dans son cabinet de curiosités)

Pourquoi la programmation fonctionnelle ?

Vous avez déjà passé 3 heures à traquer un null qui n'aurait jamais dû exister ? Vous vous êtes déjà arraché les cheveux sur une classe mutée par inadvertance au fin fond d'un appel asynchrone ? Bienvenue en enfer — enfin, dans le monde impératif.

La programmation fonctionnelle, c'est l'anti-thèse du bordel : pas d'effets de bord (ou alors on les maîtrise, genre en laisse), des types qui vous disent la vérité, et des fonctions qui font exactement ce qu'elles disent. Imaginez pouvoir remplacer tous vos for par des map, tous vos if par du pattern matching, et tous vos bugs par des messages du compilateur qui ont du sens. Magique, non ?

« Un programme fonctionnel est un programme où les variables ne varient pas et les fonctions ne sont que des fonctions — au sens mathématique du terme. C'est un peu comme si on avait inventé le concept de "variable immuable". Mais c'est tellement libérateur qu'on se demande pourquoi on a attendu si longtemps. » — Un développeur ayant fait la transition, probablement en pleine crise existentielle

Cette série de cours vous emmène des fondations du λ-calcul (oui, celui d'Alonzo Church, le mec qui a inventé le concept de "tout est fonction" et qui a probablement eu du mal à commander un café) jusqu'à la construction d'une véritable application de data analyse avec règles logiques, le tout en OCaml — ce langage fonctionnel qui sent bon la rigueur académique et l'élégance typographique.

Le programme des réjouissances

Cours 1

Du Lambda Calcul à OCaml

Fondations ★ Lambda-calcul ★ OCaml

On part de rien — littéralement : juste des fonctions. On construit les booléens, les nombres, les listes, tout ça à coup d'abstractions. À la fin, vous regarderez un for avec le même mépris qu'un hipster regarde un PHPiste.

Culture : Alonzo Church inventa le λ-calcul en 1932. À l'époque, personne n'avait d'ordinateur, mais ça n'a arrêté personne. C'est un peu comme si vous inventiez le vélo alors que la roue n'existe pas encore.
Cours 2

Types de Données Algébriques

ADT ★ Pattern matching ★ Listes ★ Arbres

Les fonctions c'est bien, les données c'est mieux. On découvre les vrais booléens, les entiers de Peano, les listes qui marchent, les arbres qui poussent, et le pattern matching — cette merveille qui remplace 15 if par une ligne élégante.

Culture : Le pattern matching vient de la tradition des langages fonctionnels (Miranda, ML, Haskell). En OCaml, c'est tellement puissant qu'on en viendrait à regretter que switch en C soit aussi moche.
Cours 3

Monades

Monades ★ Bind ★ Return ★ State ★ Continuation

Le mot qui fait peur. Non, une monade n'est pas un concept quantique réservé aux développeurs barbus en sandales. C'est juste un pattern — un pipe qui avait des ambitions. Listes, State, Reader, Continuation : on les explore toutes avec force examples.

Culture : Le terme « monade » vient des mathématiques (théorie des catégories). En programmation, son introduction par Eugenio Moggi en 1991 a changé la face d'Haskell. Depuis, c'est le sujet préféré des blogs tech — juste après « pourquoi le fonctionnel c'est l'avenir ».
Cours 4

Parseurs & Documents

Parser combinators ★ CSV ★ XML ★ HTML ★ ETL

Vous avez déjà écrit un parser CSV à la main ? Si oui, vous avez probablement pleuré. Si non, préparez les mouchoirs. La monade Parsec à la rescousse : on parse tout ce qui bouge, du CSV à l'HTML, avec une élégance qui rendrait jaloux un compilateur.

Culture : Le principe des parser combinators a été popularisé par Graham Hutton et Erik Meijer dans les années 90. Aujourd'hui, des langues entières (comme Elm) en ont fait leur cheval de bataille.
Cours 5

Mini Excel

Tableur ★ CSV ★ Navigation ★ Filtres ★ Rapports

On arrête de jouer avec des jouets : on construit un vrai mini tableur. Import CSV, navigation, formules, filtres, tris. Le genre de projet qui pourrait presque servir à quelque chose — contrairement à 95% des projets pédagogiques.

Culture : Le tableur a été inventé par Dan Bricklin en 1979 avec VisiCalc. C'est littéralement l'application qui a justifié l'achat d'un ordinateur personnel pour des millions de gens. Sans lui, l'Apple II n'aurait peut-être jamais décollé.
Cours 6

Mini jQuery

DOM ★ CSS selecteurs ★ Manipulation ★ Templates

Le DOM, cet endroit où les nœuds vont mourir. On construit un moteur de sélection CSS, on manipule, on génère des templates. Tout ça sans navigateur — juste OCaml et son regard froid de compilateur qui juge.

Culture : jQuery, sorti en 2006 par John Resig, a révolutionné le développement web en rendant le DOM supportable. On a arrêté de compter le nombre de développeurs qui lui doivent leur santé mentale.
Cours 7

Mini Prolog

Logique ★ Unification ★ Backtracking ★ Inférence

Prolog, ce langage où on écrit juste ce qu'on sait, et le compilateur trouve tout seul le reste. (Spoiler : ça marche pas toujours, mais quand ça marche, on se prend pour un dieu grec.) On implémente un moteur d'inférence avec unification et backtracking.

Culture : Prolog est né en 1972 à Marseille (oui, chez nous !) grâce à Alain Colmerauer. C'est probablement la seule chose dont Marseille puisse se vanter à égalité avec le savon et la bouillabaisse.
Cours 8

DatAlog — Fusion

Intégration ★ Table + DOM + Prolog ★ Rapports

On fusionne tout ce qu'on a fait : le tableur (cours 5), le DOM (cours 6), le moteur Prolog (cours 7). Résultat : DatAlog, une application qui charge du CSV, exécute des règles logiques et génère de superbes rapports HTML. Le grand œuvre. L'apothéose. Votre chef-d'œuvre.

Culture : Le principe de « tout est un module qu'on assemble » est au cœur de la philosophie Unix (et d'OCaml). Chaque petit programme fait une chose, et la composition fait le reste. C'est un peu comme les LEGO, mais pour les grands.
Cours 9

DatAlog — Extensions

Arithmétique ★ Négation ★ Listes ★ findall ★ Agrégations

On pousse DatAlog dans ses retranchements : is/2, la négation par échec (+ la fameuse), les listes Prolog, le findall/3 magique, et des agrégations qui feraient pâlir Excel. Le moteur logique devient un vrai langage de requêtage de données.

Culture : La négation par échec (\+) est une des grandes idées de Prolog : « si je ne peux pas prouver P, alors non-P est vrai. » C'est un peu comme décider que c'est la nuit parce que vous avez les yeux fermés. Mais en logique, ça marche étonnamment bien.
λ

L'avez-vous remarqué ? Dans ce programme, tout descend du λ-calcul. Les types, les monades, les parseurs, le moteur Prolog… C'est un peu comme un repas où tout serait fait à partir de patates, mais en classe.

Comment lire cette série ?

Dans l'ordre, comme une bonne série Netflix — mais sans le générique sautépé et avec moins de cliffhangers (quoique, les monades…). Chaque chapitre construit sur le précédent :

λ-calcul ADT Monades Parseurs Mini Excel Mini jQuery Mini Prolog DatAlog

Pré-requis : un éditeur de texte, un terminal, et une volonté féroce de ne plus jamais écrire de for boucle.