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 OAA04260; Thu, 4 Apr 2002 14:58:38 +0200 (MET DST) 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 OAA06156 for ; Thu, 4 Apr 2002 14:58:36 +0200 (MET DST) Received: from kurims.kurims.kyoto-u.ac.jp (kurims.kurims.kyoto-u.ac.jp [130.54.16.1]) by nez-perce.inria.fr (8.11.1/8.11.1) with ESMTP id g34CwYD16640 for ; Thu, 4 Apr 2002 14:58:34 +0200 (MET DST) Received: from localhost (suiren.kurims.kyoto-u.ac.jp [130.54.16.25]) by kurims.kurims.kyoto-u.ac.jp (8.9.3/3.7W) with ESMTP id VAA28355; Thu, 4 Apr 2002 21:58:26 +0900 (JST) To: rtarpine@hotmail.com Cc: caml-list@inria.fr Subject: Re: [Caml-list] Type variables won't generalize In-Reply-To: References: X-Mailer: Mew version 1.94.2 on Emacs 20.7 / Mule 4.0 (HANANOEN) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-Id: <20020404215826R.garrigue@kurims.kyoto-u.ac.jp> Date: Thu, 04 Apr 2002 21:58:26 +0900 From: Jacques Garrigue X-Dispatcher: imput version 20000228(IM140) Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk From: "Ryan Tarpine" > Thank you; that was the explanation I was waiting for! My next question is > whether or not there is some non-typesafe route around this. Could I use > Obj.magic to store different data types in one field, as long as I keep > track of what type is really there (e.g., have a second field that would > store a number representing the type) so I can cast back later? Sorry if I > keep finding myself longing for the "void*" C-ism! A well known solution to this problem is to use exceptions to hold values. exception A of int exception B of bool All exceptions define a different constructor, and they are all of type exn. But you might rather want to analyze why you want such a behaviour. Why do you need to store such a versatile data? Note that you can use polymorphic variants to handle extensible datatypes, as long as you are writing in a purely functional way. And even without using this kind of polymorphism, ML datatypes allow you to easily (and safely) handle unions (sums), so that the idiom you're looking for can be avoided. If you need parameterization, you can also look for parametric types and/or functors. I cannot give you an universal solution, because it depends very much of your concrete goal. But trying to dodge the problem is probably not the right way to go. Jacques Garrigue ------------------- 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