From: Zheng Li <li@pps.jussieu.fr>
To: caml-list@inria.fr
Subject: Re: Smells like duck-typing
Date: Thu, 18 Oct 2007 18:13:05 +0200 [thread overview]
Message-ID: <877ilkwgdq.fsf@pps.jussieu.fr> (raw)
In-Reply-To: <877ill225i.fsf@pps.jussieu.fr>
Yet another.
------------------------------------------------------------------------------
class type blurb =
object method id: int method title:string method intro:string end
class type fresh =
object method title:string method intro:string method body:string end
class type full = object inherit blurb inherit fresh end
class virtual templt = object
val virtual id: int
val virtual title: string
val virtual intro: string
val virtual body: string
method id = id
method title = title
method intro = intro
method body = body
end
let blurb (i, t, it) :> blurb =
object inherit templt val id=i val title=t val intro=it end
let fresh (t, it, b) :> fresh =
object inherit templt val title=t val intro=it val body=b end
------------------------------------------------------------------------------
Strangely though, there seems to be a bug in the OO type system: (The solution
proposed above is safe, as it does coercion)
# let coredump = object inherit templt end;;
val coredump : templt = <obj>
# coredump#title;;
Process caml-toplevel segmentation fault
Zheng Li <li@pps.jussieu.fr> writes:
> Hi,
>
> I would vote for the object solution. However, both record and object have
> their own pros and cons. The actual solution should depends on your requirement
> and taste. Just for an example, the following data structure is a possibility:
>
> # type +'a t = {title:string; intro:string; extra:'a} constraint 'a = < .. >;;
> # let fresh (title,intro,(body:string)) =
> {title=title; intro=intro; extra=object method body=body end};;
> # let blurb ((id:int),title,intro) =
> {title=title; intro=intro; extra=object method id=id end};;
> # let print_metadata s = Printf.printf "%d: %s\n" s.extra#id s.title;;
> val print_metadata : < id : int; .. > t -> unit = <fun>
>
> Dario Teixeira <darioteixeira@yahoo.com> writes:
>> I have been trying to reach a sane modelling in OCaml for a "story"
>> data structure in a CMS. The problem is that I find myself needing
>> a degree of expressiveness that I can't find in the language! I do
>> have a working, tentative solution, but it has a few ugly aspects
>> that I would very much like to improve. Details follow. (Sorry
>> for the long post; at least I hope it's not too dense and hard to
>> follow).
>
> --
> Zheng Li
> http://www.pps.jussieu.fr/~li
>
> _______________________________________________
> Caml-list mailing list. Subscription management:
> http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
> Archives: http://caml.inria.fr
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs
>
--
Zheng Li
http://www.pps.jussieu.fr/~li
next prev parent reply other threads:[~2007-10-18 16:11 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-10-17 13:35 Dario Teixeira
2007-10-17 14:13 ` [Caml-list] " Arnaud Spiwack
2007-10-17 14:47 ` Dario Teixeira
2007-10-17 14:25 ` Daniel Bünzli
2007-10-17 15:03 ` skaller
2007-10-17 15:13 ` Dario Teixeira
2007-10-17 15:25 ` Arnaud Spiwack
2007-10-17 15:32 ` Daniel Bünzli
2007-10-17 16:21 ` Chris King
2007-10-18 7:28 ` Stefano Zacchiroli
2007-10-18 8:33 ` [ANN] pa_oo and pa_polymap for 3.10 (Re: [Caml-list] Smells like duck-typing) Jacques Garrigue
2007-10-17 16:57 ` [Caml-list] Smells like duck-typing skaller
2007-10-17 16:52 ` skaller
2007-10-17 16:59 ` Robert Fischer
2007-10-17 14:33 ` Chris King
2007-10-17 14:59 ` Dario Teixeira
2007-10-17 15:24 ` Vincent Aravantinos
2007-10-17 15:26 ` Zheng Li
2007-10-18 16:13 ` Zheng Li [this message]
2007-10-18 16:37 ` [Caml-list] " William D. Neumann
2007-10-19 0:58 ` Jacques Garrigue
2007-10-17 19:59 ` [Caml-list] " Richard Jones
2007-10-17 20:24 ` Dario Teixeira
2007-10-18 7:37 ` Stefano Zacchiroli
2007-10-18 10:31 ` Dario Teixeira
2007-10-18 10:37 ` Stefano Zacchiroli
2007-10-18 13:28 ` Robert Fischer
2007-10-18 14:10 ` Dario Teixeira
2007-10-18 14:18 ` Brian Hurt
2007-10-18 14:29 ` Arnaud Spiwack
2007-10-18 14:45 ` Brian Hurt
2007-10-18 15:02 ` Arnaud Spiwack
2007-10-18 15:07 ` Robert Fischer
2007-10-18 15:14 ` Arnaud Spiwack
2007-10-18 16:39 ` skaller
2007-10-18 16:49 ` Arnaud Spiwack
2007-10-18 17:47 ` skaller
2007-10-18 19:55 ` Robert Fischer
2007-10-18 16:22 ` skaller
2007-10-18 16:30 ` Dario Teixeira
2007-10-18 14:58 ` Robert Fischer
2007-10-18 15:11 ` William D. Neumann
2007-10-18 15:47 ` Loup Vaillant
2007-10-18 16:08 ` William D. Neumann
2007-10-19 13:08 ` Ed Keith
2007-10-18 16:24 ` Dario Teixeira
2007-10-18 16:35 ` Vincent Aravantinos
2007-10-18 16:43 ` Brian Hurt
2007-10-18 17:04 ` William D. Neumann
2007-10-18 17:05 ` Dario Teixeira
2007-10-18 17:22 ` Brian Hurt
2007-10-18 17:58 ` Dario Teixeira
2007-10-18 15:42 ` Vincent Aravantinos
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=877ilkwgdq.fsf@pps.jussieu.fr \
--to=li@pps.jussieu.fr \
--cc=caml-list@inria.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox