Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] Translation between datatypes with binding
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ 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