[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Jojgov, G.I. <g.i.jojgov@T...> |
| Subject: | [Caml-list] Translation between datatypes with binding |
Hello, I am relatively new to the OCAML programming, so my question may be trivial, but did not find related messages in the list archive and I would appreciate any tips. I am trying to use OCAML as a logical framework to implement two systems with binding and to define a translation from one to the other. Ideally, I would like to be able to write code like this type expr1 = SomeValue1 of int | SomeBinder1 of int * (expr1 -> expr1);; type expr2 = SomeValue2 of string | SomeBinder2 of string * (expr2 -> expr2);; let rec translate (term:expr1) : expr2 = match term with SomeValue1 x -> SomeValue2 (string_of_int x) | SomeBinder1 (x,body) -> SomeBinder2 ((string_of_int x),(function (v:expr2) -> (translate (body v)))) ;; (this is a simplified version of the real datatypes and the translation that I want to use) Of course, this code is not type-correct because "(function (v:expr2) -> (translate (body v)))" is not. If expr1 and expr2 could "behave" like classes I could have defined a common base class, say "expr", and then redefine the binders as ... SomeBinder1 of int * (expr -> expr1);; ... SomeBinder2 of string * (expr -> expr2);; and then the code would be "type-correct". My questions are: Is there a natural way to define a function like the translation function above on datatypes? Is there another way to implement these structures? I guess the only solution is to use classes, but I already have some code dealing with the two concrete types and preferably I would like to reuse the code. Thanks in advance for your comments, Georgi ------------------- 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