Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] Design advice
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Chris Hecker <checker@d...>
Subject: Re: [Caml-list] Design advice

>   type card = Number of int | Jack | Queen | King | Ace

On a related note, for Xavier et al., why wasn't Number's field 0 assigned 
to the same counter as the int of the non-argument constructors?  In other 
words, why isn't there a single incrementing int id from left to right, 
regardless of arguments?  That would have made algorithmic manipulations on 
variants easier, because then you just have:

let card_to_int (c : card) : int =
         let r = Obj.repr c in
         if Obj.is_int r then Obj.magic c else Obj.obj (Obj.field r 0);;

I don't think it's possible to write card_to_int the way the compiler 
currently works.  If there was a card_cardinality (!) function then you 
could do that + field 0 and the argument constructors would start at the 
end (still not as nice as if they were in the source code order, but better 
than nothing).  Maybe you can write that with camlp4 (of course, with 
camlp4 you can probably just write the longhand match-with form, but if 
you're doing this a lot I'd assume match-with would be slower than just 
fetching the field).

Chris


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