Version française
Home     About     Download     Resources     Contact us    
Browse thread
different records, same field name?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ 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