From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=AWL autolearn=disabled version=3.1.3 X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by yquem.inria.fr (Postfix) with ESMTP id 2C17EBBC1 for ; Tue, 4 Mar 2008 10:52:59 +0100 (CET) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ao8CAFaqzEfBL1AZbWdsb2JhbACQdwsEBgkHGZsW X-IronPort-AV: E=Sophos;i="4.25,443,1199660400"; d="scan'208";a="7982120" Received: from gw.exalead.com (HELO exalead.com) ([193.47.80.25]) by mail2-smtp-roc.national.inria.fr with ESMTP; 04 Mar 2008 10:52:58 +0100 Received: from [192.168.204.148] (madpc064.exalead.com [192.168.204.148]) (authenticated bits=0) by exalead.com (8.14.0/8.14.0) with ESMTP id m249qtFA027388; Tue, 4 Mar 2008 10:52:55 +0100 Message-ID: <47CD1BF7.7060100@exalead.com> Date: Tue, 04 Mar 2008 10:52:55 +0100 From: Berke Durak User-Agent: Thunderbird 1.5.0.10 (X11/20070221) MIME-Version: 1.0 To: DooMeeR Cc: mfmorss@aep.com, caml-list caml-list Subject: Re: [Caml-list] different records, same field name? References: <47CC4765.2080309@doomeer.com> In-Reply-To: <47CC4765.2080309@doomeer.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit X-Spam: no; 0.00; berke:01 durak:01 berke:01 durak:01 ocaml:01 toplevel:01 ocaml:01 toplevel:01 struct:01 alain's:01 frisch:01 sprintf:01 syntax:01 compiler:01 appending:01 DooMeeR a écrit : > mfmorss@aep.com a écrit : >> I have not used OCaml, just done some reading about it and toyed with >> the toplevel to see if it might be a useful tool here. I have >> "Practical OCaml," which unfortunately is a rather wretched reference. >> >> In any case, is it possible to define and use different types of >> records, which nevertheless share some field names? I have had >> difficulty doing this in the toplevel. > > Sharing names for record labels, as well as for variant tags, is not a > good idea. Indeed, only the last name is remembered (as for everything > in OCaml), so the type system will infer the last type which has this > label. > > One way to separate names is to use modules, for instance: > > module People = struct > type t = { > name: string; > age: int; > } > end;; > > Then you can use labels People.name and People.age, for instance: > > let x = { > People.name = "x"; > age = 69; > };; > > Notice how, when defining this variant, you don't have to use "People." > for every label. > > x.People.name > > The toplevel gives you: > - : string = "x" > > If you know you won't have any name clash, you can open module People > and you won't have to use "People." everytime: > > open People;; > > let x = { > name = "x"; > age = 69; > };; > That's one instance were Alain's openin extension shows its usefulness. http://alain.frisch.fr/soft.html#openin let sprint_time () t = open Unix in sprintf "%04d-%02d-%02d" t.tm_year t.(tm_mon+1) t.tm_day Here's one thing we could do as part of the OSR. Define a list of "standard" syntax extensions and libraries. I would certainly vote for openin to be included by default. Then let the fine Debian Ocaml maintainers write a wrapper scripts around the ocaml compiler that will use those extensions and have those libraries accessible by default; name the resulting binaries in a consistent way, such as by appending an "s" (for "standard") at the end of command names, as in "ocamlcs", "ocamlopts". Put those in a package called "ocaml-osr". Tell people new to Ocaml to use those instead; the existing users will be told to just add an "s". ocamlcs, ocamlopts would expand to ocamlc -I +pcre -I +lablgtk -I +extlib -I +whatever... -pp camlp4o -pp pa_openin .. possibly depending on installed packages. -- Berke DURAK