Browse thread
different records, same field name?
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: | 2008-03-04 (09:52) |
From: | Berke Durak <berke.durak@e...> |
Subject: | Re: [Caml-list] different records, same field name? |
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