caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Jacques Garrigue <garrigue@kurims.kyoto-u.ac.jp>
To: rtarpine@hotmail.com
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] Type variables won't generalize
Date: Thu, 04 Apr 2002 21:58:26 +0900	[thread overview]
Message-ID: <20020404215826R.garrigue@kurims.kyoto-u.ac.jp> (raw)
In-Reply-To: <F194Y43O9gbhw9Ail3c00005af2@hotmail.com>

From: "Ryan Tarpine" <rtarpine@hotmail.com>
> 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


  parent reply	other threads:[~2002-04-04 12:58 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-04-04 12:19 Ryan Tarpine
2002-04-04 12:04 ` Remi VANICAT
2002-04-04 12:58 ` Jacques Garrigue [this message]
  -- strict thread matches above, loose matches on Subject: below --
2002-04-04 19:53 Ryan Tarpine
2002-04-04  1:37 Ryan Tarpine
2002-04-04  7:36 ` Francois Pottier
2002-04-03 22:21 Ryan Tarpine

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=20020404215826R.garrigue@kurims.kyoto-u.ac.jp \
    --to=garrigue@kurims.kyoto-u.ac.jp \
    --cc=caml-list@inria.fr \
    --cc=rtarpine@hotmail.com \
    /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).