Home     About     Download     Resources     Contact us

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

Browse thread
[Caml-list] Module/Functor modelisation
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
 Date: 2002-08-14 (07:07) From: Johan Baltié Subject: [Caml-list] Module/Functor modelisation
```Hi !

I have a simple functor:

module type Used =
sig
type output

val toto : int -> output -> output
val tutu : double -> output -> output
end

module type User =
functor (U : Used) ->
sig

val toto : int -> U.output -> U.output
val tutu : double -> U.output -> U.output
end

And User is implemented by two types doing mostly the same things with different
init, and with recursive and/or mutual call in toto an tutu.

I'd like to factorize the shared code, BUT the recursive call prevent me of
doing this. Here an implementation example of the part where the problem lie:

module User1: User =
functor (U : Used) ->
struct
let toto i output =
let val = U.tutu 12.0 output
in
tutu 12.0 val

let rec tutu d output =
if (d = 11.0) then
output
else
tutu (d -. 1.0) (U.toto 1 output)
end

module User2: User =
functor (U : Used) ->
struct
let toto i output =
let val = tutu 12.0 output
in
U.tutu 12.0 val

let rec tutu d output =
if (d = 11.0) then
output
else
let val = tutu (d -. 1.0) output
in
U.toto 1 val
end

Basicly I once do things in a Prefix way, and once in a postfix way.
I would like to call in User toto and tutu function like:

let toto i data =
Used.tutu 12.0 data

let tutu d output =
User.tutu (d -. 1.0) output

My problem lays here. I cannot now which User.tutu to call. If I try to make a
functor that do take a User module, there is a recursion problem as this functor
will need a User module and the user module will need this functor to be able to
call the helping functions ! It's gaving me headache....

I know this explanation is not really clear, but I tried to simplify my problem
in order to explain it and I fear people won't see any usefullness in my needs.

Thanks in advance

Ciao

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

```