From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by yquem.inria.fr (Postfix) with ESMTP id 34CD1BBBC for ; Tue, 21 Feb 2006 16:08:34 +0100 (CET) Received: from pauillac.inria.fr (pauillac.inria.fr [128.93.11.35]) by nez-perce.inria.fr (8.13.0/8.13.0) with ESMTP id k1LF8X44018673 for ; Tue, 21 Feb 2006 16:08:33 +0100 Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id QAA06567 for ; Tue, 21 Feb 2006 16:08:33 +0100 (MET) Received: from nef2.ens.fr (nef2.ens.fr [129.199.96.40]) by nez-perce.inria.fr (8.13.0/8.13.0) with ESMTP id k1LF8W0T018664 for ; Tue, 21 Feb 2006 16:08:33 +0100 Received: from clipper.ens.fr (clipper-gw.ens.fr [129.199.1.22]) by nef2.ens.fr (8.13.2/1.01.28121999) with ESMTP id k1LF8Wb4025863 for ; Tue, 21 Feb 2006 16:08:32 +0100 (CET) X-Envelope-To: Received: from (primet@localhost) by clipper.ens.fr (8.13.1/jb-1.1) Date: Tue, 21 Feb 2006 16:08:32 +0100 From: =?iso-8859-1?Q?Ma=EBl?= Primet To: caml-list@inria.fr Subject: Modules ocaml Message-ID: <20060221150832.GA4130@clipper.ens.fr> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit User-Agent: Mutt/1.5.9i X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-1.5.10 (nef2.ens.fr [129.199.96.32]); Tue, 21 Feb 2006 16:08:32 +0100 (CET) X-Miltered: at nez-perce with ID 43FB2CF1.002 by Joe's j-chkmail (http://j-chkmail.ensmp.fr)! X-Miltered: at nez-perce with ID 43FB2CF0.001 by Joe's j-chkmail (http://j-chkmail.ensmp.fr)! X-Spam: no; 0.00; mael:01 mael:01 ocaml:01 j'imagine:01 bytecode:01 definis:01 bytecode:01 definis:01 struct:01 struct:01 ocaml:01 j'imagine:01 falloir:01 m'etais:01 tete:01 X-Spam-Checker-Version: SpamAssassin 3.0.3 (2005-04-27) on yquem.inria.fr X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=disabled version=3.0.3 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