Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
[Caml-list] record declaration, SML
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2003-01-10 (03:45)
From: brogoff@s...
Subject: Re: [Caml-list] record declaration, SML
On Fri, 10 Jan 2003, Alessandro Baretta wrote:
> Daniel de Rauglaudre wrote:
> > Hi,
> > 
> > 
> >>What's best translation of the following SML type?
> >>datatype t = C of { f : int }
> > 
> > 
> > A solution is:
> >   type t = C of < f : int >
> Interesting solution. However, Ocaml does not support 
> defining objects on the fly. The following
>  > let c = new object method f = 1 end in C c
> is not valid Ocaml.
> So, in order to define just one value one needs to define an 
> entire class as in the following example.
> class f_one = object method f = 1 end
> let res = C (new f_one)

Is this such a big problem? I imagine we're more likely to provide a 
smart constructor for t, something like 

    let mkC o = C(o :> < f : int >)

and just stuff any object with method f : int in there. If we only want there 
to be one kind of thing, we're better off using a record. Of course, Daniel 
doesn't have that option since he is discussing a syntactic transformation 
from SML records into OCaml constructs, and hence using the class system makes 
sense on account of the differences between SML record typing and that of 

> BTW, why is something like the above not in the language? It 
> seems only natural to have such a feature since an analogous 
> construct exists for structs.

There are no anonymous records (like SML has) either, so if you see classes as 
analogous to records rather than structs it doesn't seem so unnatural. No, I 
realize that's not a real explanation. 

-- Brian

To unsubscribe, mail Archives:
Bug reports: FAQ:
Beginner's list: