From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id LAA10249; Mon, 14 Jan 2002 11:02:36 +0100 (MET) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: (from weis@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id LAA10117 for caml-list@pauillac.inria.fr; Mon, 14 Jan 2002 11:02:35 +0100 (MET) 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 IAA07592 for ; Sat, 12 Jan 2002 08:14:29 +0100 (MET) Received: from osiris.net-nono.com (ANice-102-1-1-58.abo.wanadoo.fr [193.252.35.58]) by nez-perce.inria.fr (8.11.1/8.11.1) with ESMTP id g0C7EST08290 for ; Sat, 12 Jan 2002 08:14:28 +0100 (MET) Received: (from pagano@localhost) by osiris.net-nono.com (8.11.2/8.11.2) id g0C7Gr729523; Sat, 12 Jan 2002 08:16:53 +0100 Date: Sat, 12 Jan 2002 08:16:53 +0100 From: Bruno Pagano To: Frederic Tronel Cc: caml-list@inria.fr Subject: Re: [Caml-list] Probleme avec des enregistrements Message-ID: <20020112081653.B29465@osiris.net-nono.com> References: <3C3EE202.8C306B0B@inrialpes.fr> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i In-Reply-To: <3C3EE202.8C306B0B@inrialpes.fr>; from Frederic.Tronel@inrialpes.fr on Fri, Jan 11, 2002 at 02:00:50PM +0100 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk > J'utilise la version 3.04 de caml. > Je veux utiliser des enregistrements dont certains > des champs portent le meme nom. Cela ne fonctionne pas. > Ainsi: > > ./ocaml > Objective Caml version 3.04 > > # type t1={a:int ; b:int} ;; > type t1 = { a : int; b : int; } > # type t2 = {a:int} ;; > type t2 = { a : int; } > # {a=2} ;; > - : t2 = {a = 2} > # {a=1;b=2} ;; > The record field label b belongs to the type t1 > but is here mixed with labels of type t2 > # > > > Il n'y a pourtant aucune ambiguite sur le type de > {a=1;b=2} ! > Est-ce un bug connu ? > Ce n'est pas un bug mais le prix a payer pour avoir la synthese de types dans le langage. En effet, si on ecrit la fonction suivante : let access x = x.a ;; Ocaml va deduire (inferer) que access est une fonction de type t2 -> int. La seule information qu'il utilise est que ".a" signifie le champs "a" d'une valeur de type t2. Si cette information etait ambigue (t1 ou t2), alors ocaml ne pourrait plus typer la fonction access ... ni grand chose d'autre d'ailleurs. C'est pour cette meme raison qu'il est peu de chance d'avoir un jour de la surcharge de noms en ocaml. Il existe cependant une possibilite pour separer les espaces de noms en utilisant des modules : si t1 et t2 sont declares dans des modules differents, ils peuvent avoir les memes identificateurs pour leurs champs. module M1 = struct type t1 = { a : int ; b : int } end module M2 = struct type t2 = { a :int } end let v1 = { M1.a=1 ; M1.b=2 } ;; (* ou encore *) let access x = x.M2.a ;; (* on reproduit l'erreur en ecrivant : *) { M2.a = 1 ; M1.b =2 } ;; The record field label M1.b belongs to the type M1.t1 but is here mixed with labels of type M2.t2 Cela peut paraitre contraignant de devoir donner des identificateurs differents pour tous les champs d'un meme module; mais c'est une convention de programmation qui me semble plutot saine, meme pour d'autres langages. Bonne continuation avec caml. Bruno Pagano ------------------- Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr