From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id QAA15519; Wed, 26 Mar 2003 16:59:26 +0100 (MET) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id QAA16119 for ; Wed, 26 Mar 2003 16:59:24 +0100 (MET) Received: from grace.speakeasy.org (grace.speakeasy.org [216.254.0.2]) by nez-perce.inria.fr (8.11.1/8.11.1) with SMTP id h2QFxMX20353 for ; Wed, 26 Mar 2003 16:59:23 +0100 (MET) Received: (qmail 7338 invoked by uid 36130); 26 Mar 2003 15:59:21 -0000 Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; 26 Mar 2003 15:59:21 -0000 Date: Wed, 26 Mar 2003 07:59:21 -0800 (PST) From: brogoff@speakeasy.net To: David Brown cc: Caml List Subject: Re: [Caml-list] Recursive types and functors. In-Reply-To: <20030326085721.GA16211@opus.davidb.org> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Spam: no; 0.00; brogoff:01 caml-list:01 functors:01 flaws:01 functor:01 filliatre:01 orderedtype:01 ord:01 'obj:01 bug:01 faq:01 beginner's:01 beginners:01 bin:01 caml-bugs:01 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk 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