J'ai entendu dire que des "modules de première classe" arrivaient dans OCaml 3.12. Quels avantages vont-ils offrir? Quels enfants de choses seront plus faciles? Quel problème tentent-ils de résoudre? Un exemple simple suffirait.Modules de première classe dans OCaml 3.12: Quels types de choses vont-ils rendre plus facile (ou possible)?
Répondre
Ce n'est qu'une des applications possibles, mais les modules de première classe facilitent le codage des types existentiels, avec essentiellement un module contenant un type existentiel et une valeur utilisant ce type). Par exemple, voir Alain Frisch travailler sur les types dynamiques (code tiré de Alain Frisch travail sur dyntypes: http://caml.inria.fr/cgi-bin/viewvc.cgi/ocaml/branches/dyntypes/stdlib/dyntypes.ml?view=markup)
module type DYN = sig
type t
val x: t
val t: t ttype
end
type dyn = (module DYN)
let dyn (type s) t x =
let module M = struct
type t = s
let x = x
let t = t
end
in
(module M : DYN)
L'idée ici est que « ttype » est une représentation concrète de ce type, un type de données algébrique Int , Float constructors et ainsi de suite, et vous avez ici une valeur, dont le type est caché, mais qui porte une représentation concrète de ce type, que vous pouvez utiliser par exemple pour obtenir une sérialisation/désérialisation plus sûre.
Peut-être un peu en retard, mais le nouveau papier First-class modules: hidden power and tantalizing promises est exactement sur le sujet. C'est un ensemble de recettes/perles autour de modules de première classe, par Oleg Kiselyov (oleg) et Jeremy Yallop (auteur, par exemple, du projet Deriving).
- 1. OCaml: Définir les modules
- 2. modules Ocaml mise en œuvre
- 3. Quels types de tests unitaires sont les plus rentables?
- 4. nouveau jeu d'outils: modules F # originaux ou portés depuis OCaml
- 5. Types OCaml avec différents niveaux de spécificité
- 6. Comment rendre la sortie de log4perl plus facile à lire?
- 7. Comment afficher plus de choses dans admin.StackedInline
- 8. Comment savoir quels modules ont été mélangés dans une classe?
- 9. Comment rendre cette requête plus facile à écrire
- 10. De quels modules dépend mod_rewrite?
- 11. Une manière plus facile ou mieux de le faire?
- 12. UIImage, existe-t-il un moyen facile de le rendre plus sombre ou tout noir
- 13. Comment rendre une image plus facile à cliquer?
- 14. Implémentation de Singleton classique dans OCaml
- 15. NSString types de classe
- 16. Qu'est-ce qui pourrait rendre cette dsl plus facile à taper ou à lire?
- 17. python plus de problèmes d'importation de modules
- 18. Trouver quels modules python sont importés
- 19. Utiliser bash quels scripts ou commandes utilisez-vous pour vous rendre plus productif?
- 20. Tâche SignFile dans MSBuild: Peut-on le rendre plus rapide?
- 21. Quels modules Apache sont requis?
- 22. 2 modules OCaml avec la même (fichier) Nom
- 23. Quels sont les autres programmes OCaml de niveau supérieur? (Vista)
- 24. redondance dans la déclaration de type OCaml (ml/MLI)
- 25. Python: Quels modules pour un site de discussion?
- 26. Empêcher "Plus" de réarranger les choses
- 27. manière plus facile de générer des chemins
- 28. Quels types de protocoles client/serveur python prend en charge dès la première utilisation?
- 29. Quels types de restrictions sont en place pour m'empêcher de modifier les types incorporés dans .NET?
- 30. Quels sont les types de chaînes les plus utilisés en C++ et comment les convertir?
Nice. Une autre application du même concept que je vois: combiner un type existentiel avec la capacité de "lier" un objet à un autre et de le faire vérifier par le système de types. Par exemple. Créez un curseur pour une connexion à une base de données, puis vérifiez qu'il ne peut pas être utilisé avec une connexion différente. Doux! –