Excuses d'avance si cette question est un peu vague. C'est le résultat de quelques rêveries de fin de semaine.Installations pour générer des types Haskell à Haskell ("second order Haskell")?
Avec le système de type merveilleux de Haskell, il est délicieusement agréable d'exprimer une structure mathématique (en particulier algébrique) comme typeclasses. Je veux dire, jetez un oeil à numeric-prelude! Mais tirer parti d'une telle structure de type en pratique m'a toujours semblé difficile.
Vous avez une belle façon de type système de CONSTATANT que v1
et v2
sont des éléments d'un espace vectoriel V
et que w
est un élément d'un espace vectoriel W
. Le système de type vous permet d'écrire un programme en ajoutant v1
et v2
, mais pas v1
et w
. Génial! Mais en pratique, vous voudrez peut-être jouer avec potentiellement des centaines d'espaces vectoriels, et vous ne voulez certainement pas créer les types , V2
, ..., V100
et déclarez-les instances de la typeclass de l'espace vectoriel! Ou peut-être que vous lisez certaines données du monde réel résultant des symboles a
, b
et c
- vous pouvez vouloir exprimer que l'espace vectoriel libre sur ces symboles est vraiment un espace vectoriel!
Alors vous êtes coincé, n'est-ce pas? Pour faire beaucoup de choses que vous aimeriez faire avec les espaces vectoriels dans un environnement de calcul scientifique, vous devez abandonner votre système de types en supprimant un type de classe d'espace vectoriel et avoir des fonctions effectuant des vérifications de compatibilité au moment de l'exécution. Devriez-vous? Ne devrait-il pas être possible d'utiliser le fait que Haskell est purement fonctionnel pour écrire un programme qui génère tous les types dont vous avez besoin et les insère dans le vrai programme? Est-ce qu'une telle technique existe? Par tous les moyens font remarquer si je néglige simplement quelque chose de fondamental ici (je suis probablement) :-)
Editer: Tout à l'heure ai-je découvert fundeps. Je vais devoir réfléchir un peu à la façon dont ils se rapportent à ma question (des commentaires éclairants à ce sujet sont appréciés).
C'est très intéressant! Merci! – gspr