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
Du 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.
Types de Données Algébriques
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.
switch en C soit aussi moche.Monades
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.
Parseurs & Documents
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.
Mini Excel
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.
Mini jQuery
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.
Mini Prolog
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.
DatAlog — Fusion
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.
DatAlog — Extensions
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.
\+) 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 :
Pré-requis : un éditeur de texte, un terminal, et une volonté féroce de ne plus jamais écrire de for boucle.