caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* Modules ocaml
@ 2006-02-21 15:08 Maël Primet
  2006-02-21 15:37 ` [Caml-list] " Maël Primet
  0 siblings, 1 reply; 3+ messages in thread
From: Maël Primet @ 2006-02-21 15:08 UTC (permalink / raw)
  To: caml-list

Bonjour,

bon,
je ne sais pas si c'est une question pour la liste beginner ou quoi, mais
vu que ça fait intervenir les modules, et que je ne les utilisais pas
quand j'étais débutant, j'imagine que ça ira.

En gros je voulais paramétrer tout un programme par des identifiants,
donc je me donne un type de module Id.S, et plusieurs implémentations de
mon module selon ce dont j'ai besoin.
Ensuite je voulais traduire du bytecode d'un langage vers un autre, donc
je définis un module SSA.S qui contient les instructions de mon bytecode
(censées être paramétrées par mes identifiants), ensuite je définis un
module Trans a une tête du genre :

module  Trans
  (..blahblah..)
  (Ident :Id.S)
  (SSADef :SSA.S with type id = Ident.t) = struct ... end ;

alors le truc c'est que je voulais pas à chaque fois (c'est plus propre ?
je sais pas trop) inclure tous les modules les uns dans les autres, ie.
pas faire

module Trans
  (..blahblah..)
  (SSADef :SSA.S) = struct module Ident = SSADef.Ident ; ... end ;

par exemple.

et en particulier, je voulais utiliser des Map et des Set sur mon type
Ident, à la fois en usage interne dans mon module Trans, et à la fois
dans le module SSADef, donc je les ai déclarés dans les deux. Mais OCaml
n'arrive pas à se rendre compte que
Map.Make(Ident).t = SSADef.IdMap.t,
alors que dans mon SSADef, le IdMap est déclaré juste comme
Map.Make(Ident). Bon j'imagine qu'il doit falloir donner pas mal de
précision à OCaml pour qu'il l'admette, mais comment faire ?

J'aurais certainement pu présenter cela de manière plus concise, mais vu
que je m'étais lancé dans cette voie sans avoir trop trop exploré le
système de module, je me dis que du coup, si quelqu'un a une remarque sur
ça, genre un moyen plus propre de le faire...

Merci!

Maël


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Caml-list] Modules ocaml
  2006-02-21 15:08 Modules ocaml Maël Primet
@ 2006-02-21 15:37 ` Maël Primet
  2006-02-21 16:03   ` Julien Signoles
  0 siblings, 1 reply; 3+ messages in thread
From: Maël Primet @ 2006-02-21 15:37 UTC (permalink / raw)
  To: caml-list

Désolé de flooder...
en fait  ma question n'avait pas trop de sens a priori, parceque caml n'a
pas moyen à partir du type d'être sûr que l'implémentation va être la
même (ce qui est d'ailleurs l'intérêt des modules), il me semble que je
suis plus ou moins obligé d'utiliser des trucs genre :

module Trans ... = struct
type IdMap = SSADef.IdMap ;
...
end;

et que c'est le plus propre.
Ceci dit, il n'y a vraiment pas moyen de dire à caml que deux modules
sont les mêmes ? (lui forcer un peu la patte ?)


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Caml-list] Modules ocaml
  2006-02-21 15:37 ` [Caml-list] " Maël Primet
@ 2006-02-21 16:03   ` Julien Signoles
  0 siblings, 0 replies; 3+ messages in thread
From: Julien Signoles @ 2006-02-21 16:03 UTC (permalink / raw)
  To: Maël Primet; +Cc: caml-list


> module Trans ... = struct
> type IdMap = SSADef.IdMap ;
> ...
> end;

> Ceci dit, il n'y a vraiment pas moyen de dire à caml que deux modules
> sont les mêmes ? (lui forcer un peu la patte ?)

Si j'ai bien compris la question et en supposant qu'il existe une
signature TRANS déclarant un module IdMap de même signature (au plus) que
celle de SSADef.IdMap :

module Trans : TRANS with module IdMap = SSADef.IdMap = struct
  module IdMap = SSADef.IdMap
  ...
end


Julien
-- 
mailto:Julien.Signoles@lri.fr ; http://www.lri.fr/~signoles
"In theory, practice and theory are the same,
but in practice they are different" (Larry McVoy)


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2006-02-21 16:03 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-02-21 15:08 Modules ocaml Maël Primet
2006-02-21 15:37 ` [Caml-list] " Maël Primet
2006-02-21 16:03   ` Julien Signoles

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).