Simplification d'un backend Haskell avec les GADTs : histoire de deux cibles Lambda Box

2025-01-24
Simplification d'un backend Haskell avec les GADTs : histoire de deux cibles Lambda Box

Cet article explique comment l'auteur a utilisé les Types Algébriques Généralisés (GADTs) en Haskell pour simplifier le développement d'un backend de compilateur Agda. Face au défi de compiler vers deux cibles différentes de langage intermédiaire Lambda Box (typé et non typé), l'auteur a utilisé les GADTs et les types dépendants pour éviter élégamment la duplication de code et imposer la sécurité des types. Le système de types empêche l'omission d'informations de type pour la cible typée. Cet exemple pratique démontre la puissance des GADTs dans la programmation quotidienne et montre comment les types dépendants peuvent aider à prévenir les erreurs, résultant en un code plus propre et plus facile à maintenir.

Lire plus
Développement Types Dépendants

Surcharge de l'abstraction lambda en Haskell : une approche élégante pour la conception d'EDSL

2024-12-30
Surcharge de l'abstraction lambda en Haskell : une approche élégante pour la conception d'EDSL

Cet article présente une nouvelle méthode pour surcharger l'abstraction lambda en Haskell afin de construire des langages de domaine spécifiques intégrés (EDSL). En utilisant intelligemment un type `Port` et les fonctions `encode`/`decode`, l'auteur traduit élégamment les fonctions Haskell en morphismes au sein d'une catégorie personnalisée. Cela donne une syntaxe concise et intuitive, évitant les complexités des abstractions Arrow et de la notation proc. L'approche nécessite un minimum de code Haskell et aucune métaprogrammation ni aucun plugin de compilateur. Un exemple d'EDSL de diagramme de flux illustre l'application de la méthode, avec des discussions sur la prévention des duplications et la gestion des effets secondaires.

Lire plus
Développement Abstraction Lambda