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

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Jacques Garrigue <garrigue@k...>
Subject: Re: [Caml-list] Abstract type over modules
From: Johan Baltié <johan.baltie@wanadoo.fr>

> I'm having a strange problem with an abstract type used in 2 modules.
> 
> The problem can be summarized as:
> 
> ************************* test1.mli ************************* 
> type toto
> 
> val test : toto -> toto
> 
> ************************* test2.mli ************************* 
> open Test1
> 
> val test2 : toto -> toto
> 
> ************************* test1.ml ************************* 
> 
>  type toto = int
> 
> let test a = (Test2.test2 a) 

OCaml does not allow mutual recursion between modules.
This prohibition is not strictly enforced (you can actually compile
test2.mli before test1.ml), but the problem appears when you try to
use the recursion.
Here the trouble is that, inside Test1, toto and Test1.toto are not
the same type: we still don't know that we are defining Test1, so
Test1.toto is just another type from another module named Test1.
Merging the two modules is probably the simplest workaround.

---------------------------------------------------------------------------
Jacques Garrigue      Kyoto University     garrigue at kurims.kyoto-u.ac.jp
		<A HREF=http://wwwfun.kurims.kyoto-u.ac.jp/~garrigue/>JG</A>
-------------------
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