New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
addendum sur la definition multiple dans les modules #3246
Comments
Comment author: administrator Salut Philippe,
Le message devrait être plus précis en effet: les noms de types, de module M = Si on acceptait cela, avec la convention qu'on garde seulement la M : sig type t = bool val x : t val y : t end et on croirait que M.x et M.y ont le même type M.t, ce qui casse le Le raisonnement est le même pour les types de modules. Pour les modules, eh bien un sous-module peut contenir des composantes Cela nous laisse uniquement les valeurs (et assimilés, e.g. les
Je suis à peu près sûr que l'on peut casser le système de types comme
Pour les composantes de valeur, oui.
Il faudrait quand même vérifier que les deux définitions sont
J'espère t'avoir convaincu qu'il y a une différence forte entre Amicalement,
|
Comment author: administrator voir #3152 |
Original bug ID: 973
Reporter: administrator
Status: closed
Resolution: not a bug
Priority: normal
Severity: minor
Category: ~DO NOT USE (was: OCaml general)
Bug description
salut,
je voudrais ajouter un element au probleme des definitions multiples
dans les modules (cf. "bug 811"): en effet, cela n'est pas permis pour
les sous-modules et les sous-signatures, e.g.
module M =
struct
module N = struct let x=3 end
module N = struct let x=3 end
end;;
Multiple definition of the module name N.
Names must be unique in a given structure or signature.
Ce message est donc inexact puisque la definition
suivante est acceptee:
module P =
struct
let x = 3
let x = 3.1
end;;
Un des interets des definitions multiples de modules est en
particulier de pouvoir faire des redefinitions lors d'inclusions.
Par exemple, lors d'une extension d'un module comme Hashtbl, ce serait
bien de pouvoir redefinir le foncteur interne Make apres une inclusion
globale de Hashtbl (cf. exemple ci-dessous).
La reponse officielle actuelle dans la bug-list au bug 811 est de dire
qu'il faut simplifier les signatures incluant des definitions
multiples, et donc ne considerer implicitement que la derniere
occurence de chaque definition multiple. Mais il serait peut-etre
preferable de:
a) Ajouter un mot-clef dans la syntaxe qui permetterait d'indiquer que
la definition multiple est deliberee et non pas erronee.
et bien sur:
b) Avoir un comportement similaire pour tout element defini de maniere
multiple (entiers, fonctions, modules, etc...)
pn
Un exemple possible d'utilisation de la redefinition apres inclusion:
module Extended_Hashtbl =
struct
include Hashtbl
end;;
The text was updated successfully, but these errors were encountered: