caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* Re: [Caml-list] Another q about many types
@ 2002-02-16  3:16 Ryan Tarpine
  2002-02-18 14:04 ` Martin Jambon
  0 siblings, 1 reply; 5+ messages in thread
From: Ryan Tarpine @ 2002-02-16  3:16 UTC (permalink / raw)
  To: caml-list

>From: Martin Jambon <m.jambon@ibcp.fr>
>To: Ryan Tarpine <rtarpine@hotmail.com>
>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
>
>
>Martin

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, rtarpine@hotmail.com
"To err is human, to compute divine.  Trust your computer but not its 
programmer."
  - Morris Kingston

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

_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp.

-------------------
Bug reports: http://caml.inria.fr/bin/caml-bugs  FAQ: http://caml.inria.fr/FAQ/
To unsubscribe, mail caml-list-request@inria.fr  Archives: http://caml.inria.fr


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Caml-list] Another q about many types
  2002-02-16  3:16 [Caml-list] Another q about many types Ryan Tarpine
@ 2002-02-18 14:04 ` Martin Jambon
  0 siblings, 0 replies; 5+ messages in thread
From: Martin Jambon @ 2002-02-18 14:04 UTC (permalink / raw)
  To: Ryan Tarpine; +Cc: caml-list

On Fri, 15 Feb 2002, Ryan Tarpine wrote:

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

Try the following

  raise (EError (obj :> allowed_exc my_object))

instead of

  raise (EError obj)


Martin

-------------------
Bug reports: http://caml.inria.fr/bin/caml-bugs  FAQ: http://caml.inria.fr/FAQ/
To unsubscribe, mail caml-list-request@inria.fr  Archives: http://caml.inria.fr


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Caml-list] Another q about many types
  2002-02-15  1:48 Ryan Tarpine
@ 2002-04-15  8:06 ` Christian Gillot
  0 siblings, 0 replies; 5+ messages in thread
From: Christian Gillot @ 2002-04-15  8:06 UTC (permalink / raw)
  To: Ryan Tarpine; +Cc: caml-list

El dv, 15-02-2002 a las 02:48, Ryan Tarpine escribió:
> 
> In the language I'm trying to implement, to raise an exception, the user 
> needs to create an instance of an exception class.  So, in my 
> implementation, I wanted to define an exception whose sole argument would be 
> an instance of a class.  But, I designed instances to be records containing 
> a polymorphic variant, which makes the record type itself polymorphic.  Is 
> there some way to raise exceptions with polymorphic arguments, or some other 
> possible way of implementing this?
I stumbled on this too ;o) Basically exception must only contains
concrete types (no polymorphics ones) otherwise it would break type
system. (Gurus can correct if this statement is wrong). This is also
why we need to use different operators for float (+.) and ints (+).
  So you've got to redesign your application in a way that it doesn't 
need polymorphic exceptions. 
  What you would need is Gcaml : pauillac.inria.fr/~furuse/generics,
but I recommend you to stick with Ocaml.

Regards,

-- 
Christian Gillot <cgillot@gruposbd.com>
GNU/Linux programmer
-------------------
Bug reports: http://caml.inria.fr/bin/caml-bugs  FAQ: http://caml.inria.fr/FAQ/
To unsubscribe, mail caml-list-request@inria.fr  Archives: http://caml.inria.fr


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Caml-list] Another q about many types
@ 2002-02-15 11:04 Martin Jambon
  0 siblings, 0 replies; 5+ messages in thread
From: Martin Jambon @ 2002-02-15 11:04 UTC (permalink / raw)
  To: caml-list

On Thu, 14 Feb 2002, Ryan Tarpine wrote:

> Many thanks for the advice on polymorphic variants; they seemed to be just
> what I needed.  But I've run into one small problem:  I can't define
> exceptions with arguments of polymorphic types.
>
> In the language I'm trying to implement, to raise an exception, the user
> needs to create an instance of an exception class.  So, in my
> implementation, I wanted to define an exception whose sole argument would be
> an instance of a class.  But, I designed instances to be records containing
> a polymorphic variant, which makes the record type itself polymorphic.  Is
> there some way to raise exceptions with polymorphic arguments, or some other
> possible way of implementing this?

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



Martin

-------------------
Bug reports: http://caml.inria.fr/bin/caml-bugs  FAQ: http://caml.inria.fr/FAQ/
To unsubscribe, mail caml-list-request@inria.fr  Archives: http://caml.inria.fr


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Caml-list] Another q about many types
@ 2002-02-15  1:48 Ryan Tarpine
  2002-04-15  8:06 ` Christian Gillot
  0 siblings, 1 reply; 5+ messages in thread
From: Ryan Tarpine @ 2002-02-15  1:48 UTC (permalink / raw)
  To: caml-list

Many thanks for the advice on polymorphic variants; they seemed to be just 
what I needed.  But I've run into one small problem:  I can't define 
exceptions with arguments of polymorphic types.

In the language I'm trying to implement, to raise an exception, the user 
needs to create an instance of an exception class.  So, in my 
implementation, I wanted to define an exception whose sole argument would be 
an instance of a class.  But, I designed instances to be records containing 
a polymorphic variant, which makes the record type itself polymorphic.  Is 
there some way to raise exceptions with polymorphic arguments, or some other 
possible way of implementing this?

Thanks in advance,

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

_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp.

-------------------
Bug reports: http://caml.inria.fr/bin/caml-bugs  FAQ: http://caml.inria.fr/FAQ/
To unsubscribe, mail caml-list-request@inria.fr  Archives: http://caml.inria.fr


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2002-02-18 14:16 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-02-16  3:16 [Caml-list] Another q about many types Ryan Tarpine
2002-02-18 14:04 ` Martin Jambon
  -- strict thread matches above, loose matches on Subject: below --
2002-02-15 11:04 Martin Jambon
2002-02-15  1:48 Ryan Tarpine
2002-04-15  8:06 ` Christian Gillot

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