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
Smells like duck-typing
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2007-10-17 (15:26)
From: Arnaud Spiwack <aspiwack@l...>
Subject: Re: [Caml-list] Smells like duck-typing
First, let us emphasize that this goes down to the original "option" 
thing, but in a more dynamic fashion. It is very possible to wrap it 
back with phantom types, which would probably be a good idea in this case.

My taste for this sort of thing is to make all this a finite map of some 
sort (might be implemented as a list, but the primitive should ensure a 
form of unicity, therefore an additional layer of abstract datatype).

Then you would need a type to query over :
"field_field = [ `Title | `Intro | `Body | `Field ].

Implement a function "fetch" that returns you a field_t or raises an 
exception (you can do similarily a function "mem" etc).

Then you can define

let title m = let `Title s = fetch `Title m in s;;
and give it type [> `Title ] story -> string   (to be sure not to raise 
an exception, modulo right phantom type invariants).

That's my own methodology for this sort of types.

Arnaud Spiwack

Dario Teixeira a écrit :
>> I would use something weaker, and I wouldn't use objects
>> either. To me, this is essentially a dynamic scenario,
>> so the data type should be dynamic. For example:
>> 	type field_t = [
>> 	| `Title of string
>> 	| `Intro of string
>> 	| `Body of string
>> 	| `Field of string * string
>> 	]
>> 	type story_t = field_t list
> Hi,
> Interesting idea, but how would you access the fields in a convenient
> manner?  Note that nothing beats record access (say, story.title) or even
> object method call (story#title) in convenience and readability.
> (I guess the convenience aspect could be sorted out with a syntax
> extension, but then we're moving into far more complex territory
> than I hope is necessary...)
> Cheers,
> Dario
>       ___________________________________________________________ 
> Want ideas for reducing your carbon footprint? Visit Yahoo! For Good
> _______________________________________________
> Caml-list mailing list. Subscription management:
> Archives:
> Beginner's list:
> Bug reports: