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: | -- (:) |
| 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