* [Caml-list] Abstract type over modules
@ 2002-11-17 11:02 Johan Baltié
2002-11-17 23:48 ` Jacques Garrigue
0 siblings, 1 reply; 2+ messages in thread
From: Johan Baltié @ 2002-11-17 11:02 UTC (permalink / raw)
To: caml-list
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)
************************* Compiling *************************
> ocamlc -v
The Objective Caml compiler, version 3.06
Standard library directory: /usr/local/lib/ocaml
> ocamlc -c test1.mli
> ocamlc -c test2.mli
> ocamlc -c test1.ml
The implementation test1.ml does not match the interface test1.cmi:
Values do not match:
val test : Test1.toto -> Test1.toto
is not included in
val test : toto -> toto
Does anyone encounter this kind of problem ?
--
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
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [Caml-list] Abstract type over modules
2002-11-17 11:02 [Caml-list] Abstract type over modules Johan Baltié
@ 2002-11-17 23:48 ` Jacques Garrigue
0 siblings, 0 replies; 2+ messages in thread
From: Jacques Garrigue @ 2002-11-17 23:48 UTC (permalink / raw)
To: johan.baltie; +Cc: caml-list
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
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2002-11-17 23:49 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-11-17 11:02 [Caml-list] Abstract type over modules Johan Baltié
2002-11-17 23:48 ` Jacques Garrigue
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox