Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
Re: [Caml-list] Another q about many types
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2002-02-16 (03:16)
From: Ryan Tarpine <rtarpine@h...>
Subject: Re: [Caml-list] Another q about many types
>From: Martin Jambon <>
>To: Ryan Tarpine <>
>Subject: Re: [Caml-list] Another q about many types
>Date: Fri, 15 Feb 2002 11:21:29 +0100 (CET)
>Maybe something like this:
>exception E of exn
>exception E_1 of t1
>exception E_2 of t2
>try ... with
>   E e ->
>     match e with
>        E_1 x1 -> x1
>      | E_2 x2 -> some_conversion_to_t1 x2

I though this was a great idea, but then I hit another roadblock.  You 
couldn't see this was coming from the info I've given so far, of course  :)  
In actuality, my objects are more like this:
  type 'a my_object = { object_ivs : 'a my_object my_table; object_data : 'a 
ref }

object_ivs stores the object's independent variables (my_table is basically 
an association table, where a name lookup finds a variable; ignore it).  
object_data stores the object's primitive, the actual OCaml data (int, 
float, string, etc.), in a polymorphic variant.  Instances of the integer 
class, for example, will have something like (`PInteger x) stored in 
object_data.  object_ivs stores whole other objects, not primitives.  A 
user-defined class, for example, would have something like (`PNone) in 
object_data and all member variables in object_ivs.

Unfortunately, this means that in order to raise an exception with an object 
of type my_object, not only its own object_data but the data of all the 
variables stored in object_ivs must be of the same type.  I've tried making 
the exception type like this:
  type allowed_exc = [ `PNone | `PInteger of int | `PFloat of float | 
`PString of string ];;
  exception EError of allowed_exc my_object;;
to make the type of allowed exceptions somewhat lax.  But, given a single 
('a my_object), how can I coerce it to an (allowed_exc my_object) if 
possible?  It has to recursively coerce all the variables in object_ivs.  
I've never done coercion at all before.

Thanks in advance (everyone's helped me so much already!),

Ryan Tarpine,
"To err is human, to compute divine.  Trust your computer but not its 
  - Morris Kingston

Ryan Tarpine,
"To err is human, to compute divine.  Trust your computer but not its 
  - Morris Kingston

Get your FREE download of MSN Explorer at

Bug reports:  FAQ:
To unsubscribe, mail  Archives: