Skip to content
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

Module-related wish #3050

Closed
vicuna opened this issue Nov 22, 2001 · 3 comments
Closed

Module-related wish #3050

vicuna opened this issue Nov 22, 2001 · 3 comments

Comments

@vicuna
Copy link

vicuna commented Nov 22, 2001

Original bug ID: 649
Reporter: administrator
Status: closed
Resolution: won't fix
Priority: normal
Severity: feature
Category: ~DO NOT USE (was: OCaml general)

Bug description

Bonjour,

Alors que class c = ... definit automatiquement un type de classe
correspondant, evitant d'avoir a ecrire class type c = ... a la
main, module M = ... ne le fait pas.

Comme il me semble que cette information est disponible de facon
interne (on a besoin de connaitre le type du module de toutes facons),
ne pourrait-on pas la rendre accessible dans la syntaxe.

Ca permettrait d'ecrire

module M2 = struct
include M1
...
end

module M2 : sig
include M1
...
end

de la meme facon qu'on ecrit

class d = object
inherit c
...
end

class d : object
inherit c
...
end

avec les classes.
Ca peut etre bien pratique quand la signature en question fait
plusieurs pages.

D'un autre cote', il est possible que certains utilisent deja la separation des espaces de noms pour definir un type de module qui n'a rien a voir avec le module du meme nom...


Jacques Garrigue Kyoto University garrigue at kurims.kyoto-u.ac.jp
JG

@vicuna
Copy link
Author

vicuna commented Nov 27, 2001

Comment author: administrator

Alors que class c = ... definit automatiquement un type de classe
correspondant, evitant d'avoir a ecrire class type c = ... a la
main, module M = ... ne le fait pas.

Comme il me semble que cette information est disponible de facon
interne (on a besoin de connaitre le type du module de toutes facons),
ne pourrait-on pas la rendre accessible dans la syntaxe.

Sans vouloir donner l'impression de critiquer les mécanismes de
classes d'OCaml, je préfère pour les modules garder une distinction
nette entre module et type de module, et la laisser bien apparente aux
utilisateurs. Du genre: un module est défini par "module M = ...",
un type de module par "module type MTY = ...", et rien d'autre.
C'est vrai que cela peut augmenter la verbosité du code, mais j'espère
que cela aide aussi à sa compréhension :-)

  • Xavier

@vicuna
Copy link
Author

vicuna commented Nov 27, 2001

Comment author: administrator

From: Xavier Leroy xavier.leroy@inria.fr

Alors que class c = ... definit automatiquement un type de classe
correspondant, evitant d'avoir a ecrire class type c = ... a la
main, module M = ... ne le fait pas.

Comme il me semble que cette information est disponible de facon
interne (on a besoin de connaitre le type du module de toutes facons),
ne pourrait-on pas la rendre accessible dans la syntaxe.

Sans vouloir donner l'impression de critiquer les mécanismes de
classes d'OCaml, je préfère pour les modules garder une distinction
nette entre module et type de module, et la laisser bien apparente aux
utilisateurs. Du genre: un module est défini par "module M = ...",
un type de module par "module type MTY = ...", et rien d'autre.
C'est vrai que cela peut augmenter la verbosité du code, mais j'espère
que cela aide aussi à sa compréhension :-)

Sauf que, alors qu'un .mli definit clairement une signature, il
n'existe actuellement aucun moyen de la recuperer en tant que telle.
On en viendrait a` envier SML, ou on definit systematiquement un
signature avant de definir la structure correspondante, ce qui fait
qu'on a toujours la signature sous la main.

Donc, meme sans chercher a pousser la symmetrie avec les classes (qui, il est vrai definissent vraiment beaucoup de choses d'un coup), il y a quelque chose a faire pour simplifier la vie des programmeurs.
Methode un peu violente, un .mli pourrait definir une signature du
meme nom, qui deviendrait la signature du .ml correspondant.

Jacques

@vicuna
Copy link
Author

vicuna commented Nov 7, 2002

Comment author: administrator

While foo.ml defines implicitly a module named Foo, foo.mli does not define
implicitly a module type named Foo. I (Xavier) prefer it this way by fear of
increasing the frequent confusion between modules and module types.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant