caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: skaller <skaller@users.sourceforge.net>
To: IdeFX@Iname.com
Cc: caml-list <caml-list@inria.fr>
Subject: Re: [Caml-list] troubles with polymorphic variant in class
Date: 15 Jun 2004 01:49:21 +1000	[thread overview]
Message-ID: <1087228160.16811.1370.camel@pelican.wigram> (raw)
In-Reply-To: <1087205340.8886.4.camel@Bess>

On Mon, 2004-06-14 at 19:29, François-Xavier HOUARD wrote:

> But the answer you gave me, which I find quite nice, don't allow my user
> to add his own class....

They would have to edit the module to do it, but they
can do it.

Here is another solution: visitor pattern.

class 'w window = object (self)
  val mutable childs: 'w list
  ...
  method iter (f:'w -> unit) =
    List.iter f childs
end

... user now can write:

type 'w mywidgets' = [`A of 'w a_kind' | `B of 'w b_kind' .. ] 

class ['w] a_kind' = object .....
class a_kind = widget a_kind' ...

etc etc as before. Now the *user* must unify all the types
with a variant, but the class doesn't need to know
what is is until it is instantiated.

One way or the other there is no alternative to unifying
all the widget types with a sum (variant) or an abstraction
(class supertypes) or both.

Typical GUI like GTK do both (there are run time
tests for kinds of widgets, so you can do button
specific things on any kind of button etc).

-- 
John Skaller, mailto:skaller@users.sf.net
voice: 061-2-9660-0850, 
snail: PO BOX 401 Glebe NSW 2037 Australia
Checkout the Felix programming language http://felix.sf.net



-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


  parent reply	other threads:[~2004-06-14 15:50 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-06-13 16:05 François-Xavier HOUARD
2004-06-13 17:59 ` skaller
2004-06-14  9:29   ` François-Xavier HOUARD
2004-06-14  9:48     ` Damien Doligez
2004-06-14 15:49     ` skaller [this message]
2004-06-14  9:37 ` Richard Jones
2004-06-14 14:48 ` nakata keiko

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=1087228160.16811.1370.camel@pelican.wigram \
    --to=skaller@users.sourceforge.net \
    --cc=IdeFX@Iname.com \
    --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;
as well as URLs for NNTP newsgroup(s).