Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: brogoff@speakeasy.net
To: David Brown <caml-list@davidb.org>
Cc: Caml List <caml-list@inria.fr>
Subject: Re: [Caml-list] Recursive types and functors.
Date: Wed, 26 Mar 2003 07:59:21 -0800 (PST)	[thread overview]
Message-ID: <Pine.LNX.4.44.0303260751140.28209-100000@grace.speakeasy.net> (raw)
In-Reply-To: <20030326085721.GA16211@opus.davidb.org>

Hi Dave,
    There is no good solution for the problem (on the Subject: line that is) in 
the language. This is on my "most annoying flaws of OCaml" list. It's been 
dicussed several times on this list, and I think if you look on comp.lang.ml 
you'll see a recent thread there too. 

    One solution you can use is the parametrization trick, that is, using an 
extra type variable to untie the recursive knot. You can do this with sets in 
OCaml by writing a polymorphic set functor, as others have explained. I don't 
know how you'd do something similar in SML, which doesn't have a polymorphic 
compare. 

    This really needs a solution sooner rather than later. It makes me wonder 
what the point of functors is, since they're obviously not for abstract data 
type libraries. OK, I'm just kidding, but it is a nasty problem. 

-- Brian

On Wed, 26 Mar 2003, David Brown wrote:

> On Wed, Mar 26, 2003 at 09:25:13AM +0100, Jean-Christophe Filliatre wrote:
> 
> > A (too) naive solution could be  to make a polymorphic instance of the
> > Set module (either  by adding an argument 'a  everywhere in signatures
> > OrderedType  and S,  or  by  copying the  functor  body and  replacing
> > Ord.compare by compare); then you have polymorphic sets, say 'a Set.t,
> > balanced using compare, and you can define
> 
> Actually, my real case doesn't use sets, but a dynamic array
> implementation I made myself.  I originally needed a functor because I
> needed an empty value to fill in past the used elements of the real
> array.
> 
> What I ended up doing was filling in those elements with 'Obj.magic 0'.
> I don't really like walking outside of the type system, but since I
> never return them, I don't think it will be a problem.
> 
> I still may try to figure out how to do it with the multiple functor
> approach, just so to learn how to do it.
> 
> Thanks,
> Dave
> 
> -------------------
> 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
> 

-------------------
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


  reply	other threads:[~2003-03-26 15:59 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-03-26  6:28 David Brown
2003-03-26  8:25 ` Jean-Christophe Filliatre
2003-03-26  8:57   ` David Brown
2003-03-26 15:59     ` brogoff [this message]
2003-03-26  9:13   ` Claude Marche

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=Pine.LNX.4.44.0303260751140.28209-100000@grace.speakeasy.net \
    --to=brogoff@speakeasy.net \
    --cc=caml-list@davidb.org \
    --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